算法训练 数的划分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法训练 数的划分相关的知识,希望对你有一定的参考价值。

http://lx.lanqiao.cn/problem.page?gpid=T84

dp[i][j] 将i分成j份的方法数
不考虑顺序,则要么包含1 要么不含1
dp[i-j][j] j份每个都给1 在把剩下的i-j分成j份 则不会再出现1

#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
const int inf=1e9;
const int N=2e2+20;
int n,k;
int dp[N][N];//
int main()
{
	while(cin>>n>>k)
	{
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;i++)
			dp[i][1]=1;
		dp[0][0]=1;
		for(int i=2;i<=n;i++)
		{
			for(int j=1;j<=min(i,k);j++)
			{
				dp[i][j]=dp[i-j][j]+dp[i-1][j-1];
			}
		}
		cout<<dp[n][k]<<endl;
	}
	return 0;
}

  

以上是关于算法训练 数的划分的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法:划分字母区间

算法训练——数的统计

763. 划分字母区间-贪心算法

ybtoj「基础算法」第1章 递推算法强化训练贪心A. 1.划分数列

22在不同的划分上进行训练和测试

kmeans聚类算法