题面
思路
Code
二维版本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 10;
const int MOD = 1e9 + 7;
ll f[N][N],n;
void solve(){
int n;
cin >> n;
for(int i=1;i<=n;++i)
f[i][0] = 1;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
f[i][j] = f[i-1][j];
if(j >= i){
f[i][j] += f[i][j-i];
f[i][j] %= MOD;
}
}
}
cout << f[n][n];
}
signed main(){
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
solve();
return 0;
}
一维版本(等价变形)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 10;
const int MOD = 1e9 + 7;
ll f[N],n;
void solve(){
int n;
cin >> n;
f[0] = 1;
for(int i=1;i<=n;++i){
for(int j=i;j<=n;++j){
f[j] += f[j-i];
f[j] %= MOD;
}
}
cout << f[n];
}
signed main(){
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
solve();
return 0;
}