题目连接:hdu_2546_饭卡
题意:中文,不解释
题解:先拿5元来买最贵的,最后就是一个01背包,这里也算用到贪心的思想
1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 5 inline void up(int &x,int y){if(x<y)x=y;} 6 7 int n,a[1001],dp[1200],m; 8 9 int main(){ 10 while(~scanf("%d",&n),n){ 11 F(i,1,n)scanf("%d",a+i); 12 scanf("%d",&m); 13 if(m<5)printf("%d ",m); 14 else{ 15 memset(dp,0,sizeof(dp)); 16 sort(a+1,a+1+n); 17 F(i,1,n-1)for(int j=m-5;j>=a[i];j--)up(dp[j],dp[j-a[i]]+a[i]); 18 printf("%d ",m-a[n]-dp[m-5]); 19 } 20 } 21 return 0; 22 }