母函数_解释

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int mx = 10001;
int c1[mx], c2[mx];
/// c1是保存各项质量砝码可以组合的数目/// c2是中间量,保存每一次的情况
int main()
{
    int nm;
    int i, j, k;
    while(cin >> nm){
        for( i = 0 ; i <= nm ; i ++ ){ 
            c1[i] = 1;
            c2[i] = 0;
        }
        for( i = 2 ; i <= nm ; i ++ ){ 
            for( j = 0 ; j <= nm ; j ++ ){ 
                for( k = 0 ; k+j <= nm ; k += i ){ 
                    c2[j+k] += c1[j];//cout<<c2[j+k]<<" "<<c1[j]<<endl;
                }
            }
            for( j = 0 ; j <= nm ; j ++ ){ 
///把c2的值赋给c1,而把c2初始化为0,因为c2每次是从一个表达式中开始的
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
        cout << c1[nm] << endl;
    }
    return 0;
}

(下面的应该有些脱离多项式乘法了,但是是我的理解,觉得错误的可以指出来, 也可以直接跳过吧)
我感觉吧,开的三重循环的意思是最外层循环是每次添加从2开始的数,第二层循环为在第几个位置添加那些数,最里面那个循环是添加多少个i这个数进去。这样循环之后就会有很多种情况产生,记录次数。打个表应该容易理解。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值