1. 程式人生 > >51nod 1101 換零錢 完全背包的變型 動態規劃

51nod 1101 換零錢 完全背包的變型 動態規劃

mes ret ges idt style img bit con com

題目:

技術分享

思路:

    for(int i = 0;i < 13; i++){
        for(int j = a[i];j <= n; j++){
            dp[j] = (dp[j] + dp[j-a[i]])%mod;
        }
    } 

a[i]:第i種硬幣的面額。

dp[j]表示有前i種硬幣,要求面額為j時,有多少種方案。

dp[j] = (dp[j] + dp[j-a[i]])%mod;

不裝的情況+裝的情況

代碼:

#include <bits\stdc++.h>
using namespace
std; const int mod = 1e9+7; int a[13] = {1,2,5,10,20,50,100,200,500,1000,2000,5000,10000}; int dp[100010]; int main(){ int n; cin >> n; dp[0] = 1; for(int i = 0;i < 13; i++){ for(int j = a[i];j <= n; j++){ dp[j] = (dp[j] + dp[j-a[i]])%mod; } } cout << dp[n] << endl;
return 0; }

51nod 1101 換零錢 完全背包的變型 動態規劃