NYOJ 860 又見01揹包 思維

2021-08-15 12:36:01 字數 800 閱讀 2182

剛一看這道題以為是01揹包的裸題,tle了一次後發現這是一道拐了個彎的裸題,題中給的物品重量範圍太大了,所以我們可以換種思路,把最大價值求出來,然後在dp中用價值去存重量,然後價值從大到小遍歷找出第乙個不大於題中給的重量,然後輸出價值即可。

ac**:

#include #include using namespace std;

const int maxn = 1000000;

int dp[maxn];

int w[200];

int v[200];

int m,p;

int main()

memset(dp,maxn,sizeof(dp)); // 要求最小值,需要都初始化為最大值

dp[0] = 0; // 這個符合情況,需要單獨把dp[0]初始化為0

for(int i=0;i=v[i];j--)

}for(int i=sum;i>=0;i--){ // 從價值最大開始往後遍歷

if(dp[i] <= p){ // 當遍歷到第乙個dp[i] <= p 時剛好符合題意,輸出i即可

cout<

NYOJ 860 又見01揹包

很經典的一道揹包題目,一般情況,我們都是把揹包的容量作為陣列的變數,但是這一道題,揹包容量資料量太大了。10 9 把容量和價值進行互換 include iostream include stdio.h include string include cstring include cmath incl...

nyoj860又見01揹包

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n個重量和價值分別為wi 和 vi 的 物品,從這些物品中選擇總重量不超過 w 的物品,求所有挑選方案中物品價值總和的最大值。1 n 100 1 wi 10 7 1 vi 100 1 w 10 9 輸入多組測試資料。每組測試資...

nyoj860 又見01揹包

題源 nyoj860 時間限制 1000 ms 記憶體限制 65535kb 難度 3 描述 有n個重量和價值分 別為wi 和 vi 的 物品,從這些物品中選擇總重量不超過 w 的物品,求所有挑選方案中物品價值總和的最大值。1 n 100 1 wi 10 7 1 vi 100 1 w 10 9 輸入多...