要求
给定整数n,取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。比如当n=6,m=8时,有四种组合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小于120.
0-1背包问题解法:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector<int> dp(m+1,0);
dp[0]=1;
for(int i=1;i<=n;i++) //注意是1到n
{
for(int j=m;j>=i;j--)
{
dp[j] += dp[j-i];
}
}
cout<<dp[m]<<endl;
return 0;
}