時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:3 描述
現在有很多物品(它們是可以分割的),我們知道它們每個物品的單位重量的價值v和重量w(1<=v,w<=10);如果給你乙個揹包它能容納的重量為m(10<=m<=20),你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。
輸入第一行輸入乙個正整數n(1<=n<=5),表示有n組測試資料;
隨後有n測試資料,每組測試資料的第一行有兩個正整數s,m(1<=s<=10);s表示有s個物品。接下來的s行每行有兩個正整數v,w。
輸出輸出每組測試資料中揹包內的物品的價值和,每次輸出佔一行。
樣例輸入
13 15
5 10
2 83 9
樣例輸出
65
**[苗棟棟]原創
上傳者
苗棟棟我的思路(錯誤的):
按照樣例輸入的分析的話,輸入3個物品,總重量為15,設取第乙個物品的重量為x,取第二個物品的重量為y,取第三個物品的和總量為z
x+y+z=15,然後按照我的思路,x*它對應的單位價值+y*它對應的單位價值+z*它對應的單位價值,然後互相博弈,求出最大值,我的**如下
#include using namespace std;
int main()
for(int i=0;i<=15;i++)
}cout<
我忽略了乙個大問題,就是第乙個商品的重量最大為10,第二個商品的重量最大為8,第三個商品的重量最大為9,這個時候,我的思路是不正確的,除了需要保證x+y+z=15以外,還需要保證x<=10,y<=8,z<=9,所以這個時候我知道我的思路是錯誤的!
然後去網上看了別人的部落格,瞬間感覺簡單了許多,思路為:
定義結構體,然後對重量進行排序,然後,根據重量的多少進行入庫
**如下:
#include #includeusing namespace std;
struct wua[11];
//對價值進行降序排序
bool cmp(struct wu a,struct wu b)
int main()
sort(a,a+s,cmp);
int sum=0;
for(int i=0;i=a[i].w)else if(m#include#define max(a,b) a>b?a:b
int main()
; scanf("%d %d",&s,&m);
for(i=0;i0;j--)
dp[j]=max(dp[j-1]+v,dp[j]);
} printf("%d\n",dp[m]);
}}
NYOJ 106 揹包問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入 第一行輸...
揹包問題 nyoj106
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入第一行輸入...
NYOJ 106 揹包問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在有很多物品 它們是可以分割的 我們知道它們每個物品的單位重量的價值v和重量w 1 v,w 10 如果給你乙個揹包它能容納的重量為m 10 m 20 你所要做的就是把物品裝到揹包裡,使揹包裡的物品的價值總和最大。輸入第一行輸入...