算法训练 数的划分

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;
}

  

时间: 2024-10-12 12:30:00

算法训练 数的划分的相关文章

算法训练 数对

时间限制:1.0s   内存限制:512.0MB 问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出格式:输出有若干行,每一行是一个乘法式子.(注意:运算符号与数字之间有一个空格)输入输出样例 样例输入 32 样例输出 1 * 32 = 322 * 16 = 324 * 8 = 328 * 4 = 3216 * 2 = 3232 * 1 = 32 import java.util.Scanner; publi

算法训练——数的统计

//数的统计 #include<stdio.h> #include<stdlib.h> int comp(const void *a,const void *b){ return *(int*)a - *(int*)b; } int main(){ int i,N,num=0; scanf("%d",&N); int a[2][N]; for(i=0;i<N;i++) scanf("%d",&a[0][i]); qsor

算法训练——数对

//数对 #include<stdio.h> int main(){ int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++){ for(j=n;j>=1;j--){ if(i*j == n) printf("%d*%d = %d\n",i,j,n); } } return 0; } 原文地址:https://www.cnblogs.com/Hqx-curiosity/p/12245111.html

C语言 &#183; 数的划分

算法提高 数的划分 时间限制:1.0s   内存限制:256.0MB 问题描述 一个正整数可以划分为多个正整数的和,比如n=3时: 3:1+2:1+1+1: 共有三种划分方法. 给出一个正整数,问有多少种划分方法. 输入格式 一个正整数n 输出格式 一个正整数,表示划分方案数 样例输入 3 样例输出 3 数据规模和约定 n<=100 作者注释:递归问题.(本题运行超时) step表示当前剩余的数需要分成的份数;把n分成k份,只需第一个数等于i,计算从i等于1一直到i等于n/k,然后把剩余的n-i

蓝桥杯 算法训练 ALGO-117 友好数

算法训练 友好数 时间限制:1.0s   内存限制:256.0MB 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:1+3=4 4的约数和有:1+2=3 所以9和4不是友好的. 220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284 284的约数和有:1 2 4 71 142=220 所以220和284是友好的. 编写程序,判断两个数是否是友好数. 输入格式 一行,两个整数,由空格分隔 输出格式 如

蓝桥杯 算法训练 ALGO-152 8-2求完数

算法训练 8-2求完数 时间限制:50.0s   内存限制:256.0MB 问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例输出 与上面的样例输入对应的输出.例: 数据规模和约定 1-9999 题目解析: 在求一个自然数的因子时,只需要循环的用该自然数与小于它的一半加一取余即可,这样可以将循环次数缩短 1 / 2 ,提高运行速度. 示例代码: 1 public class Main { 2 public static void

算法训练 K好数【蓝桥杯】

算法训练 K好数 时间限制:1.0s   内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22.30.31.33 共7个.由于这个数目很大,请你输出它对1000000007取模后的值. 输入格式 输入包含两个正整数,K和L. 输出格式 输出一个整数,表示答案对1000000007取模后的值. 样例输入 4 2 样例输出 7

蓝桥杯——算法训练之乘积最大

问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大. 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时

蓝桥杯 算法训练 ALGO-124 数字三角形

算法训练 数字三角形 时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 3