摘要: 题意:找出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) 编辑