#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升的水