題意:
問多重部分和能否恰好等於m。
思路:
dp[i][j]:用前i種面額硬幣湊成j後,第i種硬幣最多剩下的個數,若湊不成則為-1.可優化空間複雜度。
反思:
想不出應該如此定義dp陣列。
**:
#include
using
namespace
std;
int a[100 + 10];
int c[100 + 10];
int dp[100000 + 10];
int main()
for(int i = 0; i < n; i++)
dp[0] = c[0];
for(int j = 1; j <= m; j++)
else dp[j] = dp[j - a[0]] - 1;
}for(int i = 1; i < n; i++)
else
if(a[i] > j || dp[j - a[i]] <= 0)
else}}
int cnt = 0;
for(int i = 1; i <= m; i++)
printf("%d\n", cnt);
}return
0;}
poj1742 動態規劃 經典多重揹包
有n種不同面值的硬幣,面值各為a1,a2,a3。an,數量各為c1,c2,c3,cn。給定數m,問這些硬幣能組成小於等於m的數中的哪些數,輸出這些數的數目。開始想的是從1到m判斷每個數是不是能被這些硬幣組成,但是判斷每個硬幣的數量的時候出現了問題,難以統計每種硬幣使用的數目,後來去網上搜了搜,發現可...
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拆...