记录:还有亿点点没搞懂,过两天会回来补思路的
#include<iostream>//抽象为一个完全背包问题(不考虑顺序),从小到大
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1000010,MOD=1e9;
int n;
int f[N];
int main()
{
cin>>n;
f[0]=1;
for(int i=1;i<=n;i*=2)//枚举物品
for(int j=i;j<=n;j++)//枚举体积
f[j]=(f[j-i]+f[j])%MOD;
cout<<f[n]<<endl;
}
class Solution {
public:
int combinationSum4(vector<int>& nums, int n) {
vector<unsigned>f(n+1);
f[0]=1;
for(int i=1;i<=n;i++)
for(auto j:nums)
if(i>=j)
f[i]+=f[i-j];
return f[n];
}
};