问题描述
将 3 分解成两个正整数的和,有两种分解方法,分别是 3 = 1 + 2 和 3 = 2 + 1。注意顺序不同算不同的方法。
将 5 分解成三个正整数的和,有 6 种分解方法,它们是 1+1+3 = 1+2+2 = 1+3+1 = 2+1+2 = 2+2+1 = 3+1+1。
请问,将 2021 分解成五个正整数的和,有多少种分解方法?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案:
691677274345
蓝桥杯去年水了个国二,又过去一年了,又到一年一度备战暴力杯(bushi) 蓝桥杯的时候了,最近正在学动态规划,看到这个题第一反应,这不背包嘛。。。
看到好多dalao写了数学方法和记忆化搜索方法,本蒟蒻提供一个完全背包的方法吧。。。。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 3000;
typedef long long ll;
ll dp[10][maxn]; //一定要开long long,不然会溢出
ll num[maxn];
ll n = 2021;
int main() {
for(int i = 0; i <= 2021; i++) dp[1][i] = 1;
for(int i = 2; i <= 5; i++) {
for(int j = 1; j <= 2021; j++) {
for(int k = 1; k <= 2021; k++) {
if(j > k) dp[i][j] += dp[i-1][j-k];
}
}
}
// for(int i = 1; i <= 2021; i++) cout << dp[5][i] << ' ';
cout << dp[5][2021] << endl;
return 0;
}