51nod 動態規劃基礎篇 6

點擊打開鏈接


輸入

第1行,2個整數,N和W中間用空格隔開。N爲物品的數量,W爲揹包的容量。(1 <= N <= 100,1 <= W <= 10000)
第2 - N + 1行,每行2個整數,Wi和Pi,分別是物品的體積和物品的價值。(1 <= Wi, Pi <= 10000)

輸出

輸出可以容納的最大價值。

輸入示例

3 6
2 5
3 8
4 9

輸出示例

14

ps:具體的題解51nod網頁上已經很清楚,我也不班門弄斧了。


#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[110][10010];
struct Bag
{
	int v;
	int w;
}bag[10010];

int main()
{
	int n,w1,i,j;
	while(scanf("%d %d",&n,&w1) != EOF)
	{
	  for(i=1;i<=n;i++)
	   scanf("%d %d",&bag[i].w ,&bag[i].v );	
	  for(i=1;i<=n;i++)
	  {
	  	for(j=0;j<=w1;j++)
	  	{
	  	  	if(j>=bag[i].w)
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-bag[i].w]+bag[i].v);
            else
                dp[i][j]=dp[i-1][j];
	  	  	 
		}	  		  		  	
	  }	
		
	printf("%d\n",dp[n][w1]);	
		
	}		
	return 0;
}


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