【DP】数的划分(ybtoj DP-1-3)
生活随笔
收集整理的這篇文章主要介紹了
【DP】数的划分(ybtoj DP-1-3)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)的劃分
ybtoj DP-1-1
題目大意
給你一個(gè)n,讓你分成k份,問(wèn)有多少種分法(1,2和2,1為同一種)
輸入樣例
7 3輸出樣例
4
樣例解釋
四種分法為:1,1,5;1,2,4;1,3,3;2,2,3.1,1,5; \ \ 1,2,4; \ \ 1,3,3; \ \ 2,2,3.1,1,5;??1,2,4;??1,3,3;??2,2,3.
數(shù)據(jù)范圍
6<n?200,2?k?66<n\leqslant 200,2\leqslant k\leqslant 66<n?200,2?k?6
解題思路
可以讓生成序列單調(diào)遞減,使其不重復(fù)
如果讓其單調(diào)遞減,那只有兩種操作:
1.新增1份,里面有1
2.前i份全部加1
這樣保證后面的加了前面的也一定會(huì)加
fi,j=fi,j?i+fi?1,j?1f_{i,j}=f_{i,j-i}+f_{i-1,j-1}fi,j?=fi,j?i?+fi?1,j?1?
代碼
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; int n, k, f[10][210]; int main() {scanf("%d%d", &n, &k);f[0][0] = 1;for (int i = 1; i <= k; ++i)for (int j = i; j <= n; ++j)f[i][j] = f[i][j - i] + f[i - 1][j - 1];//遞推printf("%d", f[k][n]);return 0; }總結(jié)
以上是生活随笔為你收集整理的【DP】数的划分(ybtoj DP-1-3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【DP】奇怪汉诺塔(ybtoj DP-1
- 下一篇: 【DP】平铺方案(ybtoj DP-1-