LitDream 2015-07-10 04:06:20
点我顶贴
收藏
删除
#include <cstdio>
#include <cstring>
inline int max(int a,int b){
return a>b?a:b;
}
int main(){
int c,b;
scanf("%d%d",&c,&b);
int f[b+2][c+1];
memset(f,0,sizeof(f));
int x[b+1];
memset(x,0,sizeof(x));
int i;
for(i=1;i<=b;i++) scanf("%d",&x[i]);
for(i=1;i<=b;i++)
for(int j=0;j<=c;j++){
f[i][j]=f[i-1][j];
if(j>=x[i]){
f[i][j]=max(f[i][j],f[i-1][j-x[i]]+x[i]);
if(f[i][j]>j) f[i][j]=j;
}
}
printf("%d",f[b][c]);
return 0;
}
#1 weownit@2015-08-23 08:58:49
33408
回复
删除
#include<cstdio>
int f[22][35001]={0};
int main()
{
int n,c,i,j;
int t[22]={0};
scanf("%d%d",&c,&n);
for(i=1;i<=n;i++)
scanf("%d",&t[i]);
for(i=1;i<=n;i++)
for(j=c;j>=0;j--)
if(t[i]<=j)
f[i][j]= f[i-1][j] > f[i-1][j-t[i]]+t[i] ? f[i-1][j] : f[i-1][j-t[i]]+t[i];
else f[i][j]=f[i-1][j];
printf("%d",f[n][c]);
return 0;
}