給出硬幣面額及每種硬幣的個數,求從1到m能湊出面額的個數。
input
多組資料,每組資料前兩個數字為n,m。n表示硬幣種類數,m為最大面額,之後前n個數為每種硬幣的面額,後n個數為相應每種硬幣的個數。 (n<=100,m<=100000,面額<=100000,每種個數<=1000)
output
rtsample input
3 10sample output1 2 4 2 1 1
2 51 4 2 1
0 0
8雖然這道題的揹包型別是多重揹包,我們可以看成完全揹包去求解,狀態轉移方程dp[j]=dp[j-a[i]]+1,意思就是填充過後的種類=沒填充該硬幣+1.我們注意用乙個陣列標記一下每乙個硬幣的使用情況避免重複計算。4
#include #include #include #include using namespace std;
const int maxn=1e5+100;
int dp[maxn];
int vis[maxn];
int a[maxn],b[maxn];
int n,m;
int main()
}} cout<} return 0;
}
poj 1742 Coins 多重揹包
題意很簡單,有n種硬幣,每種硬幣面額多大,有多少個,求可以構成m以內的面額有多少種。開始用的是普通的多重揹包的求法,裸裸的超時了,看了別人的 發現可以優化很多。用usea這個來儲存用來多少個a硬幣,避免的很多無用的計算。先貼以前超時的 include include int dp 100005 in...
POJ 1742 Coins 多重揹包DP
題意 有n種面額的硬幣。面額 個數分別為a i c i,求最多能搭配出幾種不超過m的金額?思路 dp j 就是總數為j的價值是否已經有了這種方法,如果現在沒有,那麼我們就乙個個硬幣去嘗試直到有,這種價值方法有了的話,那麼就是總方法數加1。多重揹包可行性問題 傳統多重揹包三重迴圈會超時,因為只考慮是否...
poj1742 Coins 多重揹包優化DP
給定n個物品,第i個物品價值為a i 數量為c i 求可以組成的小於m的價值的個數。好像n,m的範圍比較大,暴力跑二進位制優化的多重揹包是可以卡過去的。但是有一種o nm o n m 的方法來優化多重揹包,即在列舉體積的時候我們按照完全揹包來順序列舉,完全揹包裡的列舉體積是可以滿足重複選擇同意物品的...