标签:
1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0
-45 32
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int val[1010],f[1010];
int main()
{
int t;
while(~scanf("%d",&t))
{
if(t==0)
break;
int m;
int i,j,k=0;
memset(f,0,sizeof(f));
for(i=0;i<t;i++)
scanf("%d",&val[i]);
scanf("%d",&m);
if(m<5)
{
printf("%d\n",m);
continue;
}
sort(val,val+t);
for(i=0;i<t-1;i++)//确保除了最大的,其余的每个都遍历
{
for(j=m-5;j>=val[i];j--)//j表示价值
f[j]=max(f[j],f[j-val[i]]+val[i]);
}
printf("%d\n",m-f[m-5]-val[t-1]);
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zm_11/article/details/48031225