Mojiu @ 2017-09-11 13:49:06
最后一个点re
ac 应该是120800
而我的是123400
求dalao解答
#include<bits/stdc++.h>
using namespace std;
int f[65][3],m,n;
int zu[65][3];
int num[32000];
int main()
{
scanf("%d%d",&m,&n);
m=m/10;
for(int i=1;i<=n;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
f[i][0]=c;//roup
f[i][1]=a*b;//value
f[i][2]=a/10;//price
if(f[i][0]!=0)
{
int u=f[i][0];
if(zu[u][1]==0)
zu[u][1]=i;
else zu[u][2]=i;
}
}
for(int i=1;i<=n;i++)
for(int j=m;j>=f[i][2];j--)
{
if(f[i][0]!=0)continue;
num[j]=max(num[j],num[j-f[i][2]]+f[i][1]);
int a1=zu[i][1],a2=zu[i][2];
if(a1!=0&&j>=f[i][2]+f[a1][2])
num[j]=max(num[j],num[j-f[i][2]-f[a1][2]]+f[i][1]+f[a1][1]);
if(a2!=0&&j>=f[i][2]+f[a2][2])
num[j]=max(num[j],num[j-f[i][2]-f[a2][2]]+f[i][1]+f[a2][1]);
if(a1!=0&&a2!=0&&j>=f[i][2]+f[a1][2]+f[a1][2])
num[j]=max(num[j],num[j-f[i][2]-f[a1][2]-f[a2][2]]+f[a2][1]+f[i][1]+f[a1][1]);
//printf("%d\n",&nu)
}
printf("%d",num[m]);
return 0;
}
by 萝卜 @ 2017-09-11 14:21:45
数组开大些试试。
一般RE就这么干。