題目連接:hdu_2546_飯卡
題意:中文,不解釋
題解:先拿5元來買最貴的,最後就是一個01揹包,這裏也算用到貪心的思想
#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
inline void up(int &x,int y){if(x<y)x=y;}
int n,a[1001],dp[1200],m;
int main(){
while(~scanf("%d",&n),n){
F(i,1,n)scanf("%d",a+i);
scanf("%d",&m);
if(m<5)printf("%d\n",m);
else{
memset(dp,0,sizeof(dp));
sort(a+1,a+1+n);
F(i,1,n-1)for(int j=m-5;j>=a[i];j--)up(dp[j],dp[j-a[i]]+a[i]);
printf("%d\n",m-a[n]-dp[m-5]);
}
}
return 0;
}