摘要: 解题报告:题目大意:现有一个十进制的数n,问n的二进制表示应该是多少。简单题,直接暴力的方法,输入一个n ,每次n--,同时保存结果的数组第一位加一,然后再暴力判断是否要进位。最后将储存结果的那个数组倒着输出就是了。View Code 1 #include<stdio.h> 2 #include<string.h> 3 int main() { 4 int n,ans[55]; 5 while(scanf("%d",&n)!=EOF) { 6 memset(ans,0,sizeof(ans)); 7 while(n--) { 8 ... 阅读全文
posted @ 2013-05-12 22:24 xiaxiaosheng 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意:用n条折线最多可以将平面分成多少个部分。动态规划,当把第n条折线添加到拥有n-1条折线的图里面时,为了尽可能多的分割平面,所以这条折线要与原有的n-1条折线都有交点,交点总数就是2*(n-1),交叉之后总的线段数为4*(n-1),和两条射线,所以得到新增加的区域数目就是4*(n-1)+1,其中4*(n-1)是通过线段增加的区域,而1是通过两条射线增加的区域数目。得到递推公式就是DP[n]=DP[n-1]+4*(n-1)+1。View Code 1 #include<stdio.h> 2 __int64 DP[10000+5]; 3 void dabiao(voi 阅读全文
posted @ 2013-05-12 21:56 xiaxiaosheng 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意:现有一个蜜蜂房如右图所示,每一个蜜蜂房都有编号,现在一只蜜蜂要从a号蜜房爬到b号蜜蜂房,问一共有多少条不同的路线。又是一道动态规划题,由于整个蜂房是按照一定的周期排列的,所以我们可以不管a和b到底是多少,只要知道b-a的值就可以了,为了方便,令n=b-a,即要求蜜蜂从1号蜂房走到n号蜂房一共有多少种不同的路线,我们可以将1到n转化为1到n-1和1到n-2的子问题来求出我们所要的解,可以理解为当现在要从一号房爬到n号房,可以假设蜜蜂现在在n-1号房,那么蜜蜂从n-1号房爬到n号房可以有一种走法,另一种是假设蜜蜂现在就在n-2号房,那么从n-2号房走到n号房也是只有一种走法所以 阅读全文
posted @ 2013-05-12 21:07 xiaxiaosheng 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意:给你一个n,表示有n个排成一条直线的方格,现在有红、粉、绿三种颜色,用着三种颜色将这个n个方格涂满,涂色的规则是相邻的两个方格的颜色不能相同,并且最后一格跟第一格的颜色不能相同,要求一共有多少涂色的方法。也是一道动态规划题,若现在要求有n个方格时有多少种涂色方法,可以把它化为两个子问题来 求解,第一,当第n-1个方格涂的颜色与第一格的颜色相同时,而第n-1格的颜色与第一格颜色相同的情况可以由n-2格的结果得到,因为当有n-2个方格的情况的时候,要求的就是最后一格不能与第一格的颜色相同,于是就可以看成是将n-2的情况直接在后面加上一种与第一格相同的颜色,就得到了当第n-1格的 阅读全文
posted @ 2013-05-12 19:58 xiaxiaosheng 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意:给你一个n ,表示有2*n规格的方格,现在又若干个1*2规格的骨牌,要用骨牌将2*n 规格的方格铺满,问有多少种铺法。动态规划题,要求有n格时铺的方法种数,就可以通过有n-1跟n-2个方格的结果来递推出来,思想就是当要求有n个方格时铺的方法种数就可以理解为在n-1格的情况下,多了一个格,那么着多出的一个就可以直接将一块骨牌竖直放好就可以填满了,然而还要加上有将两块骨牌横着放的情况,这时就需要有两个空的方格,于是我们可以由n-2个方格的情况递推过来,也就是加上一个n-2的情况,可以定义一个数组DP【55】,首先将数组DP初始化为DP[1]=1;DP[2]=2;DP[3]=3; 阅读全文
posted @ 2013-05-12 19:40 xiaxiaosheng 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 解题报告:题目大意:现要跨上一个结束为M 的台阶,每次可以选择一次跨一级台阶或者一次跨上两级台阶,问跨上这个M级的台阶有多少种跨法。最简单的动态规划题,假设我现在在第n级台阶上,要跨上级数为M的台阶可以将问题转化为要从第n 级台阶一步跨只跨一级台阶跨到n+1级台阶上,也可以选着一次一步跨两级台阶直接跨到n+2级台阶上,所以从第n级台阶跨上M级台阶的方法种数就是从第n级台阶一步跨一级跟一步跨两级的和就为从第n级台阶跨上M级台阶的方法种数。View Code 1 #include<stdio.h> 2 int DP[45]; 3 void dabiao(void) { 4 DP[1]= 阅读全文
posted @ 2013-05-12 16:57 xiaxiaosheng 阅读(145) 评论(0) 推荐(0) 编辑
摘要: Problem DescriptionIgnatius was born in a leap year, so he want to know when he could hold his birthday party. Can you tell him? Given a positive integers Y which indicate the start year, and a positive integer N, your task is to tell the Nth leap year from year Y. Note: if year Y is a leap year, th 阅读全文
posted @ 2013-05-12 10:42 xiaxiaosheng 阅读(165) 评论(0) 推荐(0) 编辑
摘要: Problem DescriptionACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange the M days for the N courses to maximize the profit?InputThe input consists of multiple data set 阅读全文
posted @ 2013-05-12 10:40 xiaxiaosheng 阅读(160) 评论(0) 推荐(0) 编辑
摘要: Description有N个顶点,每个顶点有一个权值,初始值皆为0。接下来有M次操作,操作内容为 [a,b) or [b,a),将区间内顶点i 权值置为1,求最后顶点权值为0的数量。Input多组测试数据。第一行为两个整数n, m,n(1<=n<=20000)表示顶点, m(1<=m<=50000)表示操作次数。接下来包含m行,每行包含两个正整数 a,b属于区间[1,n] ,意义如上所述。Output每组测试输出一行,包含一个整数,表示顶点值为0的数量。Sample Input3 11 23 11 3Sample Output21解题思路: 一看到这题可能就会容易想到应 阅读全文
posted @ 2013-05-12 10:39 xiaxiaosheng 阅读(238) 评论(0) 推荐(0) 编辑
摘要: Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下) 呵呵,很简单吧?Input每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开 阅读全文
posted @ 2013-05-12 10:34 xiaxiaosheng 阅读(157) 评论(0) 推荐(0) 编辑