把m升水倒入n个桶中,可以有桶为空,问有多少种倒法


#include <iostream>
using namespace std;
int count;
void DPS2(int x1,int x2,int x3,int x4,int x5)
{
    if(x3>x4) return;
    for(int i=x5;i>=0;i--)
    {
        if(x1==x2&&x3+i==x4)
            count ++;
        else if(x1<x2)
            DPS2(x1+1,x2,x3+i,x4,i);
    }
}
void DPS(int x,int y)
{
    DPS2(0,y-1,0,x,x);
}
int main()
{
    count = 0;
    int m,n;
    cin >> m >> n;
    DPS(m,n);
    cout << count;
}
x1,x2,x3,x4,x5 分别表示当前算第x1个桶,共x2+1个桶,当前已经装了x3升水,共需要装x4升水,它前面的一个桶装了x5升水。


好复杂的样子,,只是因为  7,3   的时候,方案有

7,0,0

6,1,0

5,2,0,

5,1,1,

4,3,0

4,2,1

3,3,1

3,2,2

共7种方法,,5,1,1, 和1,1,5 算同一个。。所以  三个数间有大小排列的关系就可以排除那个情况了

所以设置了x5 表示左边那个桶装了多少升水,当前桶不能装超过x5升的水




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值