LeetCode 377. 组合总和 Ⅳ
原题链接
中等
作者:
ITNXD
,
2021-04-25 21:28:51
,
所有人可见
,
阅读 427
详细请查看注释
参考代码:
class Solution {
public:
/*
这不是背包问题:背包问题不考虑顺序!
状态表示:f[i]表示和为i的所有划分集合的个数
状态计算:考虑倒数第二个选择!
f[i] += f[i - a[j]]
进阶问题限制:
1. 如果数组中存在负数,则有可能有无穷多个答案。 ---> -1, 1 凑0 ,方案无穷
2. 添加负数个数的限制。
*/
int combinationSum4(vector<int>& a, int m) {
int n = a.size();
// 可能爆int, 使用无符号int即可
vector<unsigned> f(m + 1);
f[0] = 1;
for(int i = 1; i <= m; i ++)
for(int j = 0; j < n; j ++)
if(i >= a[j]) f[i] += f[i - a[j]];
return f[m];
}
};