2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在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进阶)的更多相关文章
- CSU计算机研究生推免
考研复习 一开始,我是没有想到能够拿到研究生推免资格的,从今年3月份到整个暑假过完,一共6个月的时间,我一直在准备考研. 具体来说,我是在准备考研数学,整整6个月时间的数学复习,给我一种感觉,把大一大 ...
- 大概是:整数划分||DP||母函数||递推
整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...
- 保研机试训练[bailianoj]
site:http://bailian.openjudge.cn/xly2018/ 1.计算任意两天之间的天数 思路:以0为起始点计算天数,然后相减即可.这样的编码复杂度会减少很多. #include ...
- 2018届研究生招生预推免(THU,HIT)经历分享——guochengtao
注:本文为作者原创文章,且为无偿分享,读者可以阅读,但请尊重劳动成果,勿作为商业用途!如对文章中的内容有意见或者出现了您不喜欢的言论,请您保留,谢谢合作! 又到一年12月,这代表着2017年已经接近尾 ...
- 2014华为机试西安地区B组试题
2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...
- 2014华为机试西安地区A组试题
2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...
- 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)
原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...
- 北邮14&18年软院机试【参考】答案
2014 Problem A. 奇偶求和 题目描述: 给定N个数,分别求出这N个数中奇数的和以及偶数的和. 输入格式 第一行为测试数据的组数T(1<=T<=50).请注意,任意两组测试数据 ...
- java机试要点
Java机试准备 一般结构: import java.util.Scanner; public class Main{ public static void main(String[] args) ...
随机推荐
- 【转】asp.net mvc 页面跳转
1.使用传统的Response.Redirect例如string url = "/account/create";Response.Redirect(url); 1.Server. ...
- android自定义控件(9)-Android触摸事件分发机制
触摸事件的传递机制: 首先是最外层的viewgroup接收到事件,然后调用会调用自己的dispatchTouchEvent方法.如果在ACTION_DOWN的时候dispatchTouchEven ...
- Collection类相关总结
集合类的框架如下: Collection(接口) List(接口):允许重复. ArrayList Vector LinkedList Se ...
- 基础知识系列☞各版本下IIS请求处理过程区别
转载地址→http://www.cnblogs.com/fsjohnhuang/articles/2332074.html ASP.NET是一个非常强大的构建Web应用的平台, 它提供了极大的灵活性和 ...
- iOS 8 牛刀小试
iOS 8 牛刀小试 1.UIWindow的bounds发生变化(Window本身发生了旋转) iOS 7之前Window的bounds不会随着方向而变化,但是到了iOS 8以后,随着设备方向的旋转, ...
- select2
.select2-container .select2-choice { height: 34px; line-height: 34px; } .自定义 组件高度 在css 里面设置 .select2 ...
- putchar和puts
#include<stdio.h> int main() { char a = 'h'; char b[] = "hello"; putchar(a); //putch ...
- PHP基础之 string 字符串函数
/*=================常用字符串处理函数================== ltrim(); //去掉字符串左边的空格 rtrim(); //去掉字符串 ...
- 决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)
1. 1.问题的引入 2.一个实例 3.基本概念 4.ID3 5.C4.5 6.CART 7.随机森林 2. 我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款? ...
- 大数据之Ganglia安装1
0.前期准备修改主机名.ip.iptables关闭:时间同步:ntpdate -s time.windows.com;软件准备ganglia-3.7.1.tar.gz.ganglia-web-3.7. ...