poj1742 布林值型 多重揹包

2021-07-15 18:51:11 字數 1000 閱讀 1326

題意:

乙個人有許多種硬幣: a1, a2, a3, a4 .....ai (1 <= i <= n);

每一種硬幣有許多個: c1, c2, c3, c4 .....ci (1 <= i <= n);

問他可以用硬幣組成多少種不超過 m 的**;

理解:這是樓教主的男人必過八題;

可惜了,自己做不來;

神解釋說是多重揹包;

但是和書上的不一樣;

其實遞推式才是真正有用的東西;

遞推式含義:dp[i] 表示能否通過前面已求出來的確定**推導出 i 這個**;

即:dp[i] = (dp[i - a[i]] == 1);

其中 a[i] 使用了的個數不能超過 c[i] 個;

**如下:

#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

typedef pairpii;

const int min_inf = 1e-7;

const int max_inf = (1e9) + 7;

#define x first

#define y second

int dp[100100], sum[100100];

int main()

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

memset(dp, 0, sizeof(dp));

int ans = 0;

dp[0] = 1; //初始值 0 一直都是被計算出來的值,也不需要計算

for (int i = 0; i < n; ++i) }}

cout << ans << endl;

}return 0;

}

POJ 1742多重揹包問題

include include include include includeusing namespace std define maxn 105 define maxl 100005 int weight maxn c maxn f maxl user maxl int main printf ...

poj 1742 多重揹包(單調佇列)

如題 又是這道題 第一種方法是二進位制拆分多重揹包 能過hdu2488 見我這一篇 第二種是為了減小時間複雜度,通過改變dp策略 能過poj1742 不能過杭電 這裡說第三種,多重揹包的0 vn 複雜度演算法。使用了單調佇列。這位大牛寫的很清楚 也就是找出狀態轉移方程中的重複狀態,然後將容量拆成v拆...

POJ1742 動態規劃 多重揹包

題意 問多重部分和能否恰好等於m。思路 dp i j 用前i種面額硬幣湊成j後,第i種硬幣最多剩下的個數,若湊不成則為 1.可優化空間複雜度。反思 想不出應該如此定義dp陣列。include using namespace std int a 100 10 int c 100 10 int dp 1...