51nod 1101 换零钱 完全背包

来源:互联网 发布:当网络写手挣钱吗 编辑:程序博客网 时间:2024/05/22 14:05
N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。
例如:5分钱换为零钱,有以下4种换法:
1、5个1分
2、1个2分3个1分
3、2个2分1个1分
4、1个5分

(由于结果可能会很大,输出Mod 10^9 + 7的结果)



完全背包,统计个数问题。

就是完全背包的模板,之后用加法,而不是max/min。


对于一个数n,设容量为n,我们选择其它的数进行填充,不限使用次数。并且用加分进行累加!

#include <stdio.h>  
#include <cstring>  
#include <algorithm>  
using namespace std;  
#define CLR(a,b) memset(a,b,sizeof(a))  
#define INF 0x3f3f3f3f  
#define LL long long  
int m[13] = {1,2,5,10,20,50,100,200,500,1000,2000,5000,10000};  
const int mod = 1000000007;  
int dp[10000011];  
int main()  
{  
    int n;  
    scanf ("%d",&n);  
    for (int i = 0 ; i <= n ; i++)  
        dp[i] = 1;  
    for (int i = 1 ; i < 13 ; i++)  
    {  
        for (int j = m[i] ; j <= n ; j ++)  
            dp[j] = (dp[j] + dp[j-m[i]]) % mod;  
    }  
    printf ("%d\n",dp[n]);  
    return 0;  
}  

原创粉丝点击