POJ2184 動態規劃 01揹包

2021-08-17 15:02:13 字數 1140 閱讀 9727

題意:

某物 i , 有兩種屬性值 s[i] 和 f[i] ,每件物品可取或不取,求最後s + f的最大值,同時保證s >= 0 且 f >= 0。(s 為取出的 s[i] 的總和, f為取出的 f[i] 的總和)

思路:

1、涉及到取與不取的問題,很自然地想到了揹包。

「物品的價值」這個顯而易見,但是「揹包的容量」在**?我們可以把兩個維度 t 和 s,任取乙個當作「物品的價值」,另乙個做「揹包的容量」,而容量最大值自然是這個屬性所有正數之和。

即dp[i]:當 f 屬性之和為 i 時, s 屬性之和的最大值。

2、至於負數問題, 將陣列開成最大值的兩倍即迎刃而解。

3、坑點:01揹包第二重迴圈因 f[i] 的正負不同, 迴圈方向也不同。

反思:

**:

#include 

#include

#include

#include

using

namespace

std;

const

int inf = 0x3f3f3f3f;

const

int maxn = 100 + 10;

const

int maxm = 100 * 1000 * 2 + 1000;

int dp[maxm];

int n;

int f[maxn], s[maxn];

int maxf;

int solve()}}

else}}

}int maxs = 0;

bool flag = false;

for(int i = 100000; i <= maxf; i++)}}

if(flag)

return maxs;

else

return0;}

int main()

maxf += 100000;

for(int i = 0; i < maxm; i++)

printf("%d\n", solve());

}

變種的01揹包,POJ 2184

題意 這是又是一道01揹包的變體,題目要求選出一些牛,使smartness和funness值的和最大,而這些牛有些smartness或funness的值是負的,還要求最終的smartness之和以及funness之和不能為負。自己想不出來,這裡值得借鑑的就是把其中乙個東西當做費用,另乙個當做價值,這...

dp揹包之01揹包poj2184

題意 給定兩個屬性,求這兩個屬性的和的最大值.思路 將第乙個屬性往後平移1000個單位,然後推導其動態轉移方程,若是dp i 代表當加入第乙個屬性加到i時,符合題意的第二個屬性的最大值.題意是兩個屬性的和的最大值,那麼動態轉移方程必然不是dp j max dp j dp j s i 0 s i 1 ...

動態規劃 (01揹包 poj3624 )

關於揹包問題 眾所皆知,這裡講給出關於揹包問題的一些簡介 乙個旅行者準備隨身攜帶乙個揹包 可以放入揹包的物品有n 種 每種物品的重量和價值分別為 wj vj 如果揹包的最大重量限制是 b,怎樣選擇放入揹包的物品以使得揹包的價值最大?題目就是這麼簡單 先思考乙個問題 就是每種物品可以重複選擇,這種要怎...