1. 程式人生 > >數的劃分 洛谷 P1025 dp

數的劃分 洛谷 P1025 dp

題解

使用動態規劃求解 設定狀態d[i][j]表示分為i份總和為j
列舉分的份數和當前總和 嘗試增加一份大小為1到N的進行轉移
根據題意1,1,5和1,5,1為同一種 增加的這一份的迴圈需要放在最外面

AC程式碼

#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int INF = 0x3f3f3f3f;
const int MAXN = 210;
int d[10][MAXN]; //分成幾份 總和

int main(
) { #ifdef LOCAL //freopen("C:/input.txt", "r", stdin); #endif int N, K; cin >> N >> K; d[0][0] = 1; for (int i = 1; i <= N; i++) //單份大小 for (int j = 0; j + i <= N; j++) //當前總和 for (int k = 0; k < K; k++) //已有幾份 d[k + 1][j + i] += d[k][j]; cout << d[K][N] << endl; return
0; }