hdu_2546_飯卡(01揹包)

題目連接: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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章