这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全面,考察了三种整数划分的变形问题。

Openjudge 原题网址:Bailian2014研究生推免上机考试(校内)

原题:

  Description

  将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
  正整数n 的这种表示称为正整数n 的划分。

  Input
  标准的输入包含若干组测试数据。每组测试数据是一行输入数据,包括两个整数N 和 K。   
  (0 < N <= 50, 0 < K <= N)
  Output
  对于每组测试数据,输出以下三行数据:
  第一行: N划分成K个正整数之和的划分数目
  第二行: N划分成若干个不同正整数之和的划分数目
  第三行: N划分成若干个奇正整数之和的划分数目  
  Sample Input
  5 2
  Sample Output
  2
  3
  3
  Hint  
  第一行: 4+1, 3+2,
  第二行: 5,4+1,3+2
  第三行: 5,1+1+3, 1+1+1+1+1+1

  有关这三种变形问题的具体解释在我的另一篇随笔中有提及:整数划分问题-解法汇总,看不懂Code的ACMer见这篇随笔。

  

  Code如下:

  

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; #define MAX 51 int dp1[MAX][MAX];
int dp2[MAX][MAX];
int dp3[MAX][MAX]; /*划分成K个整数*/
void DP1()
{
for (int n = ; n < MAX; n++)
{
for (int k = ; k < MAX; k++)
{
if (n == k || k == )
dp1[n][k] = ;
else if (n > k)
dp1[n][k] = dp1[n - k][k] + dp1[n - ][k - ]; //划分中不包含1 + 划分中至少有一个1
}
}
} /*划分成<=m的不同整数*/
void DP2()
{
for (int n = ; n < MAX; n++)
{
for (int m = ; m < MAX; m++)
{
if (n > m) //除m外的数不包括m(即剩下划分总和为n-m中没有m)
dp2[n][m] = dp2[n - m][m - ] + dp2[n][m - ];
else if (n < m)
dp2[n][m] = dp2[n][n];
else
dp2[n][m] = + dp2[n][m - ];
}
}
} /*划分成<=m的奇正整数*/
void DP3()
{
for (int n = ; n < MAX; n++) //+1不会增加种类
{
for (int m = ; m < MAX; m+=)
{
if (n > m)
dp3[n][m] = dp3[n - m][m] + dp3[n][m - ];
else if (n < m)
dp3[n][m] = dp3[n][n];
else
dp3[n][m] = + dp3[n][m - ];
dp3[n][m + ] = dp3[n][m];
}
}
} int main()
{
DP1();
DP2();
DP3();
int num, k;
while (scanf("%d%d", &num, &k) != EOF)
{
printf("%d\n", dp1[num][k]);
printf("%d\n", dp2[num][num]);
printf("%d\n", dp3[num][num]);
} return ;
}

小墨-原创

2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)的更多相关文章

  1. CSU计算机研究生推免

    考研复习 一开始,我是没有想到能够拿到研究生推免资格的,从今年3月份到整个暑假过完,一共6个月的时间,我一直在准备考研. 具体来说,我是在准备考研数学,整整6个月时间的数学复习,给我一种感觉,把大一大 ...

  2. 大概是:整数划分||DP||母函数||递推

    整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...

  3. 保研机试训练[bailianoj]

    site:http://bailian.openjudge.cn/xly2018/ 1.计算任意两天之间的天数 思路:以0为起始点计算天数,然后相减即可.这样的编码复杂度会减少很多. #include ...

  4. 2018届研究生招生预推免(THU,HIT)经历分享——guochengtao

    注:本文为作者原创文章,且为无偿分享,读者可以阅读,但请尊重劳动成果,勿作为商业用途!如对文章中的内容有意见或者出现了您不喜欢的言论,请您保留,谢谢合作! 又到一年12月,这代表着2017年已经接近尾 ...

  5. 2014华为机试西安地区B组试题

    2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...

  6. 2014华为机试西安地区A组试题

    2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...

  7. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...

  8. 北邮14&18年软院机试【参考】答案

    2014 Problem A. 奇偶求和 题目描述: 给定N个数,分别求出这N个数中奇数的和以及偶数的和. 输入格式 第一行为测试数据的组数T(1<=T<=50).请注意,任意两组测试数据 ...

  9. java机试要点

    Java机试准备 一般结构:   import java.util.Scanner; public class Main{ public static void main(String[] args) ...

随机推荐

  1. dijkstra算法求最短路

    艾兹格·W·迪科斯彻 (Edsger Wybe Dijkstra,1930年5月11日~2002年8月6日)荷兰人. 计算机科学家,毕业就职于荷兰Leiden大学,早年钻研物理及数学,而后转为计算学. ...

  2. django book

    一.安装配置 1.下载地址: https://www.djangoproject.com/download/ 2.安装: tar zxvf Django-1.6.1.tar.gz && ...

  3. ROS Hotspot服务器的搭建与设定!(上网认证)

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 说明:由于Hotspot设定的步骤比较多,此文档只讲解如何设定Hotspot的方法,关于ROS的安装与路由上网的配置请自行百度查阅. ...

  4. Apache服务器httpd.exe进程占用cpu超过50%的解决方法

    httpd.exe进程占用cpu超过50%,关闭掉Apache服务,cpu应用率立刻下降到0.  重新启动Apache又出现占用cpu高的情况.  原因是:httpd.exe和防火墙配置有冲突. 解决 ...

  5. JS跳转后台

    location.href = ROOT+"?"+VAR_MODULE+"=FaPiao&"+VAR_ACTION+"=dell&id ...

  6. PHP简易聊天室&调试问题

    在进入login.php程序之后 <?php error_reporting(E_ALL^E_NOTICE); session_start();  //装载Session库,一定要放在首行 $u ...

  7. 【bzoj1036】[ZJOI2008]树的统计Count

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v ...

  8. ORA-22868: 具有 LOB 的表包含有位于不同表空间的段

    由于lob对象引起的表空间无法删除.本来是要删除DMS表空间,但是上面有LOB对象,而且表却是在别的表空间DMS4上.解决的办法就是将这些lob移动到DMS4表空间.下面是解决过程 删除用户时报错: ...

  9. C#GDI+编程基础(一:Graphics画布类)

    GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using ...

  10. H53D旋转-遁地龙卷风

    (-1)写在前面 首先图片是我从互联网上下载的,向这位前辈致敬.我用的是chrome49,没有加不同浏览器的前缀,jquery3.0,图片资源放在了我的百度云盘上http://pan.baidu.co ...