这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在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()
 {
     ; n < MAX; n++)
     {
         ; k < MAX; k++)
         {
             )
                 dp1[n][k] = ;
             else if (n > k)
                 dp1[n][k] = dp1[n - k][k] + dp1[n - ][k - ];    //划分中不包含1 + 划分中至少有一个1
         }
     }
 }

 /*划分成<=m的不同整数*/
 void DP2()
 {
     ; n < MAX; n++)
     {
         ; 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()
 {
     ; n < MAX; n++)    //+1不会增加种类
     {
         ; 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]);
     }

     ;
 }

小墨-原创

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. java机试要点

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

  9. 2015 NI 校招笔试机试面试

    美国国家仪器NI也算是入驻上海很好的一家外企了,它是我们院的合作公司,加上今年NI在我们院扩招实习生,这次是一个难得的机会可以进入NI实习,可惜我并没有好好把握... 一.笔试 几个做错的印象特别深刻 ...

随机推荐

  1. 与你相遇好幸运,使用redis设置定时任务

    参考链接: Nodejs中使用Redis来完成定时任务 自己在 window 7下编码实现: 1 > 首先查看redis版本: redis-server -v , 版本要求大于等于2.8 2&g ...

  2. Oracle 常用操作【02】数据库特性

    1. 导出 oracle 注释 -- 表明細+表注释+字段明细+字段注释 a.一个用户下的表明細+表注释+字段明细+字段注释 select ATC.OWNER, atC.TABLE_NAME, utc ...

  3. 微软BI 之SSIS 系列 - ETL 转换时关于 Code Page (1252 and 936) 转换错误的原因和解决方法

    开篇介绍 最近经常碰到在 ETL 练习中出现这种转换失败的问题,试了多种方式,同样的代码同样的源结构和表结构但是一直不能成功执行,包报错.一般有这么几种错误: Error at DST_LOAD_DA ...

  4. 《Hadoop基础教程》之初识Hadoop

    Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程> ...

  5. SQL Server存储过程(转载)

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  6. adb不响应

    1.CMD命令窗口输入:adb nodaemon server .然后就会提示你哪个端口被占用了. 2.输入netstat -ano | findstr "5037" .然后会弹出 ...

  7. function的粗浅理解

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. nginx上传模块—nginx upload module-

    一. nginx upload module原理 官方文档: http://www.grid.net.ru/nginx/upload.en.html Nginx upload module通过ngin ...

  9. earlysuspend调用过程

    1. 电源管理的状态 Android的Linux内核为系统提供了4种电源状态,内核的源码为当中的3种定义了名字和相应的宏定义,名字定义在kernel/power/suspend.c中: constch ...

  10. 题目1010:A + B

    题目描述: 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B ...