liusikai 2013-06-29 23:27:00
点我顶贴
收藏
删除
#include<stdio.h>
int max(int x,int y)
{
int z;
if(x>y) z=x;
else z=y;
return z;
}
int main()
{
int value[30],f[35000]={0};
int c,b,i,j;
int max(int x,int y);
scanf("%d%d",&c,&b);
for(i=0;i<b;i++)
{
scanf("%d",&value[i]);
}
/* for(i=0;i<b;i++)
{
for(j=i;j<b;j++)
{
int a;
if(value[i]<value[j])
{
a=value[i];
value[i]=value[j];
value[j]=a;
}
}
}....根本不要考虑到数据的排列的顺序,以为转移动态过程会根据c与value[i]的差值来转移数据再把新得到的数据储存到数组f[i]中。*/
for(i=0;i<b;i++)
{
for(j=c;j>0;j--)
{
if(j-value[i]>=0)
{
f[j]=max(f[j],f[j-value[i]]+value[i]);
}
}
}
printf("%d\n",f[c]);
return 0;
}