1 条题解

  • 0
    @ 2026-9-23 1:48:14

    【思路】

    完全背包
    很水的一道完全背包题目

    【题目大意】

    一些面额的货币
    组合成n价值一共有多少种组合方式

    【核心思路】

    假如你有a,b,c面值的硬币
    你需要凑足acioi的面额
    那么单纯看acioi来说
    acioi的组合数量是不是就是
    (acioi - a) , (acioi - b) 和 (acioi - c)这三种面额组成方式的和?
    所以这就可以跑完全背包了
    只不过这里是加起来
    不是求最值了

    【完整代码】

    #include<iostream>
    #include<cstdio>
    #define int long long 
    
    using namespace std;
    const int Max = 10005;
    int b[Max] = {1},a[30];//默认b[0]为1,也就是在代码中减去一种硬币的面额之后等于0,是这一种硬币一个就可以组成的,所以次数是1 
    signed main()
    {
    	int v,n;
    	cin >> v >> n;
    	for(register int i = 1;i <= v;++ i)
    		cin >> a[i];
    	for(register int i = 1;i <= v;++ i)
    		for(register int j = a[i];j <= n;++ j)
    			b[j] += b[j - a[i]];
    	cout << b[n] << endl;
    	return 0;
    }
    
    • 1

    [USACO2.3] 货币系统Money System / [USACO07OCT] Cow Cash G

    信息

    ID
    1012
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    38
    已通过
    19
    上传者