poj 3714:點菜問題

#include<iostream>
using namespace std;
struct food
{
	int p,v;	
};
int main()
{
	int c,m;
	int dp[1010];
	food f[110]; 
	while(cin>>c>>m)
	{
		for(int i=1;i<=m;i++)
			cin>>f[i].p>>f[i].v;
		for(int i=0;i<1010;i++)
			dp[i] = -1;
		dp[0] = 0;
		for(int i=1;i<=m;i++)
		{
			for(int j=c;j>=0;j--)
				if(dp[j]>=0 && j+f[i].p<1010)
					dp[j+f[i].p] = max(dp[j]+f[i].v,dp[j+f[i].p]);
		}
		int cmax = 0;
		for(int i=0;i<=c;i++)
			cmax = max(cmax,dp[i]);
		cout<<cmax<<endl;
	}
	return 0;
}

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