HU 2546:食事カード(01バックパック)
3181 ワード
HU 2546:食事カードhttp://acm.hdu.edu.cn/showproblem.php?pid=2546
問題があったら、物体の価値と順序を選択する必要があります.順序を並べてから、その01に対して処理します.この問題は私達が小さい時は先に注文すればするほど5に近くなります.そして一回に最大値を取ると、私達が使うお金はもっと多くなります.
問題があったら、物体の価値と順序を選択する必要があります.順序を並べてから、その01に対して処理します.この問題は私達が小さい時は先に注文すればするほど5に近くなります.そして一回に最大値を取ると、私達が使うお金はもっと多くなります.
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
#define N 1005
int dp[N+50];
int main(void)
{
int num[N];
int n,m;
int i,j;
while(cin>>n&&n!=0){
for(i=1;i<=n;i++) cin>>num[i];
cin>>m;
memset(dp,0,sizeof(dp));
dp[0]=1;
int ma=0;
sort(num+1,num+1+n);
for(i=1;i<=n;i++){
for(j=m+45;j>=0;j--){
if((m-j)>=5&&dp[j]){
dp[j+num[i]]=1;
ma=max(ma,j+num[i]);
}
}
}
cout<<m-ma<<endl;
}
return 0;
}