完全揹包

/*完全揹包
時間限制:3000 ms  |  內存限制:65535 KB
難度:4
描述
直接說題意,完全揹包定義有N種物品和一個容量爲V的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包
容量,且價值總和最大。本題要求是揹包恰好裝滿揹包時,求出最大價值總和是多少。如果不能恰好裝滿揹包,輸出NO
輸入
第一行: N 表示有多少組測試數據(N<7)。 
接下來每組測試數據的第一行有兩個整數M,V。 M表示物品種類的數目,V表示揹包的總容量。(0<M<=2000,0<V<=50000)
接下來的M行每行有兩個整數c,w分別表示每種物品的重量和價值(0<c<100000,0<w<100000)
輸出
對應每組測試數據輸出結果(如果能恰好裝滿揹包,輸出裝滿揹包時揹包內物品的最大價值總和。 如果不能恰好裝滿揹包,輸出NO)
樣例輸入
2
1 5
2 2
2 5
2 2
5 1
樣例輸出
NO

1*/

#include<stdio.h>
#include<string.h>
int main()
{
 int N;
 scanf("%d",&N);
 while(N--)
{
 int M,V;
 int dp[100010];
 int a,b;
 int i,j;
 scanf("%d%d",&M,&V);
 memset(dp,-0x3f,sizeof(dp));
 dp[0]=0;
 for(i=0;i<M;i++)
 {
 scanf("%d%d",&a,&b);
 for(j=a;j<=V;j++)
        {
 if(dp[j]<dp[j-a]+b)
     dp[j]=dp[j],dp[j-a]+b;
}
 }
 if(dp[V]<=0)
      printf("NO\n");
 else
     printf("%d\n",dp[V]);
 }
 return 0;
 }


發佈了33 篇原創文章 · 獲贊 1 · 訪問量 9679
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章