本題為多重揹包問題,即每種零錢的個數是有限個,求不超過目標錢數的可以組合出的最大錢數
採用dp的思想,先對目標錢數以內的所有面額做逆向遍歷,初始dp[0] = true,即0元可湊出
在此基礎上如果當前的stat可以湊出,那麼繼續組合出更大的錢數,記下當前有限個零錢和前面的
零錢一起可以湊出的不超過目標錢數的所有合法的值。最後從money逆向列印記下的最大的值即可
source code
problem:1276
user:yangliuacmer
memory:640k
time:516ms
language:c++
result:accepted
#include using namespace std; int main() dp[0] = true; for(i = 0; i < m; i++) } } } for(stat = money; stat >= 0; stat--) } } return 0; }
仿ATM取款機
include include atmoperate.h int cards 5 int pwd 5 int money 5 int flag 5 int i ist int cards 5 int cardid,int n else if cards mid cardid else return ...
模擬ATM取款機
此程式具有查詢餘額,取款,存款功能。模擬atm取款機 2017年4月8日 西安科技大學 汪強 include include include int m 1 控制系統退出 struct user 定義結構體 s void file3 寫餘額 fprintf in,f s.d fclose in vo...
poj1276 多重揹包
題意 取款機的問題 有 n 種錢 每種錢有 v i 的價值 每種錢有 w i 張 問給定要取得錢 cash 之後能從取款機最多取多少錢 理解 多重揹包 直接套模板 遞推式 dp i max dp i dp i mul v i mul v i 其中的值根據 定義 如下 include include ...