HDU -- 2546 饭卡问题

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;
const int maxn = 1e4+100;
int dp[maxn];
int p[maxn],n,m;

int main()
{
while(cin>>n)
{
if(n==0) break;
for(int i=0;i<n;i++) cin>>p[i];
cin>>m;
if(m<5)
{
cout<<m<<endl;
continue;
}
sort(p,p+n);//排序 (从小到大)
memset(dp,0,sizeof(dp));
for(int i=0;i<n-1;i++)
{
for(int j=m-5;j>=p[i];j--)// 留五元买最贵的
{
dp[j]=max(dp[j],dp[j-p[i]]+p[i]);
}
}
cout<<m-dp[m-5]-p[n-1]<<endl;
}
return 0;

}

猜你喜欢

转载自www.cnblogs.com/zzwbo/p/11280679.html