把多级最优化问题分解为一系列单阶问题。在不断增加过程中,不断计算当前问题最优解。
#include <iostream>
using namespace std;
int count;
void DPS(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)
DPS(x1+1,x2,x3+i,x4,i);
}
}
int main()
{
count = 0;
int m,n;
cin >> m >> n;
DPS(0,n-1,0,m,m);
cout << count;
}
x1,x2,x3,x4,x5 分别表示当前算第x1个桶,共x2+1个桶,当前已经装了x3升水,共需要装x4升水,它前面的一个桶装了x5升水