上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 34 下一页
摘要: 1058 题意:整体思想是利用已经知道的序列中的元素根据规则去生成新的元素, 如x * 2, x * 3, x * 5, x * 7.假设使用数组a[MAX]进行存储这一序列的所有元素, 首先使a[0] = 1, 表示第一个元素是1, 然后利用4个指针(不是内存指针,呵呵), i2 = i3 = i5 = i7 = 0. 每次我们比较 a[i2] * 2, a[i3] * 3, a[i5] * 5, a[i7] * 7 这四个元素的大小, 把最小的放到序列中, 并把对应的指针+1, 直到生成需要的个数.#include<stdio.h>#include<string.h> 阅读全文
posted @ 2011-10-31 16:16 枕边梦 阅读(1483) 评论(0) 推荐(0) 编辑
摘要: 哈,我的第一道母函数题目。题意:一个由1~N 组成的集合,问将这个集合分成俩个子集,使得俩个子集的和相等的方法数。、分析:分成俩个子集,子集的和相等,很明显,子集的和已经知道了。换种说法,就是求用1~N 这个数组合出和为(1+N)*N/4 方法数的一半。这就用到 母函数的思想,求出函数(1+x)*(1+x^2)*(1+x^3)……(1+x^N)的展开式中,指数为 (1+N)*N/4 的项的系数。/*ID: nanke691LANG: C++TASK: subset*/#include<iostream>#include<fstream>#include<strin 阅读全文
posted @ 2011-10-29 15:12 枕边梦 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 题意:初始化,所有灯都是亮的,之后总共只有四种操作1)所有的灯情况都取反2)编号为奇数的灯取反3)编号为偶数的灯取反4)编号为3*x+1 的灯取反现在,问,执行了C步操作之后,某些灯的亮的,某些灯的关的,求出所有的灯的可能组合。题意:每个按钮按2次和没按效果是一样的。所以每个按钮或者按或者不按,一共有2^4=16种状态。枚举每个按钮是否按下,然后生成结果,排序输出即可(注意判重)。/*ID: nanke691LANG: C++TASK: lamps*/#include<iostream>#include<fstream>#include<string>#in 阅读全文
posted @ 2011-10-29 13:02 枕边梦 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 题意:找出N个不同的正数(3 <= N <= 18) Ai (1 <= i <= N), 满足:输出各个N个取值下的可能的解;分析:根据 1/(a * b) = 1/a(a + b) + 1/b(a + b) ,可以将一个可能的Ai 拆分成俩个所有,由已知的一组当N等于3时的一组解{2,3,6},将其中一个可能的Ai拆分成俩个。再由N等于4时的解求出N等于5时的解,以此类推;#include<iostream>#include<string.h>#include<algorithm>using namespace std;int a[ 阅读全文
posted @ 2011-10-27 17:04 枕边梦 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 题意:给出 N,B 和 D:找出 N 个编码(1 <= N <= 64),每个编码有 B 位[二进制](1 <= B <= 8),使得两两编码之间至少有 D 个单位的“海明距离”(1 <= D <= 7)。“海明距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目。看下面的两个编码 0x554 和 0x234 之间的区别(0x554 表示一个十六进制数,每个位上分别是 5,5,4):0x554 = 0101 0101 01000x234 = 0010 0011 0100不同位 xxx xx因为有五个位不同,所以“海明距离”是 5。分析:直接暴力搜索 阅读全文
posted @ 2011-10-27 02:41 枕边梦 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3811题意:给定1~N个数,求出至少满足一个条件的排列总数m个条件如下:Ai 个数为Bi (0<i <m)分析:“本意是一个复杂的容斥原理,但是开场不久被秒杀,才发现又一个比较简单的状态DP方法” 这是武大预赛解题报告上的原句。确实,用容斥原理来解决确实十分蛋疼,最直接就是满足各个条件之后去重,好SB的样子==!。可是用状态DP却很好解决了。我们通过求出一个条件都不满足的排列总数,从而间接的求出满足至少一个条件的排列总数。对于当前的位置,利用前面已经求得的种数求得。结合代码比较好解释,看 阅读全文
posted @ 2011-10-27 00:22 枕边梦 阅读(332) 评论(1) 推荐(0) 编辑
摘要: 题意:农民JOHN以拥有世界上最健康的奶牛为傲。他知道每种饲料中所包含的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少。给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少。维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解。输出:输出文件只有一行,包括牛必需的最小的饲料种数P后面有P个数,表示所选择的饲料编号(按从小到大排列)。如果有多个解,输出饲料序号最小的(即字典序最小)。分析:总共有十五种饲料,要找出符合能满足条件的最少的种数,相当于要求出一种组合,那么就求出各种长度的组合,再找出符合条件的最小字 阅读全文
posted @ 2011-10-26 18:46 枕边梦 阅读(672) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3810题意:Magina 去打怪,目的是在最短的时间内得到m units money。已知有N个怪分布在N个地点,打每一怪可以获得gi money,但同时也需要花ti 时间。Magina 可以任意的选择一个怪开始打,已知他又一个技能,就是瞬间移动啦,从一个地方到另一个地方,不需要花费时间,但前提是这俩个地方是相连的,打完一个怪之后,该怪物就会消失,同时那个相连的路也会跟着消失。分析:大致题意就是这样了,一开始就是直接搜啦,很笨的方法,是因为没注意到一个问题,“For every spots, Mag 阅读全文
posted @ 2011-10-25 18:29 枕边梦 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 题意:x1 = x – sqrt(y)y1 = y – sqrt(x)给你x1和y1,求x,y,如果有多种,输出x最小的。分析:将方程转化为x = x1 + sqrt(y);y = y1 + sqrt(x);可以发现x >= x1, y >= y1.所以可以用迭代法无限逼近x, y初始x=x1,y=y1;x = x1 + sqrt(y);y = y1 + sqrt(x);#include<iostream>#include<math.h>using namespace std;int main(){ int T,cas=0; double x1,y1; ci 阅读全文
posted @ 2011-10-24 16:03 枕边梦 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个长度为N的数组,全部由{1,2, 3}组成,求将其排列成不降序列的最少移动次数分析:求出每个1,2,3 各自 是数量,count[1],count[2],count[3]; 这样也就知道了排列后各个元素所属的区域;接下来,我们先需要考虑1 和2 俩块区域;交换一次,能够回到自己所属的区域,应该就是最好的交换了,这样我们就优先考虑交换之后俩俩可以回到自己位置的交换for (int i=1;i<=count[1]+count[2];i++){ if (t[i]==3) a[3]++; else if (t[i]==2&&i<=count[1]) a[1]+ 阅读全文
posted @ 2011-10-23 02:31 枕边梦 阅读(196) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 34 下一页