上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 42 下一页
转自http://www.cppblog.com/baby-fly/archive/2010/08/03/122027.aspx?opt=admin很显然是动态规划。dp[i]表示前i个数有多少个有效的子序列。那么 dp[i]=dp[i-1]+A。 A是前面i-1个数中,与i的差值不超过d的以该数结尾的有效的子序列的个数 的和。我们可以用另外一个数组sub[i]表示以i结尾的有效的子序列的个数。 dp与sub的不同之处是dp中的子序列不一定是以第i个数结尾的。sub[i]= sigma sub[k] ,( abs(numk],num[i])<=d )。 由于求sub的时间复杂度为O(n^ Read More
posted @ 2011-12-19 06:19 Because Of You Views(387) Comments(0) Diggs(0) Edit
View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int MAX = 800000;int a[800000];bool is(int x){ int i=0,a[11]; memset(a,0,sizeof(a)); while(x>0) { int tmp=x%10; a[tmp]++; if(a[tmp]>=2) return false; x/=10; }... Read More
posted @ 2011-12-19 00:28 Because Of You Views(533) Comments(0) Diggs(0) Edit
我决定:以后每一场codeforces我都将进行总结,尽量在赛后把题目AK(*_*),水平有限,只能说尽量。难得有一场CF的比赛在白天开始,于是我准时的守候在电脑前准备打一场CF,哈哈a题b题很快过了,c题卡了一下,原因是在poj做过类似的一道题,http://www.cnblogs.com/wuyiqi/archive/2011/09/20/2182986.html但是这道题目只需要求有几个区间能被其他区间完全覆盖,并不需要求每个区间分别能被几个区间覆盖,这是本质差别对于这道题,只需要排个序(没必要用树状数组)x递增,y递减所以后面的x肯定大于等于前面的x,现在只需要比较y即可,如果y小于m Read More
posted @ 2011-12-19 00:03 Because Of You Views(413) Comments(0) Diggs(0) Edit
题目要求从目标状态变到终点状态至少需要几步,数据较小,而且终点状态是一样的,所以直接从终点状态开始反向广搜,把所有的状态都搜出来记录一下就好了记录状态可以用哈希,把一个状态映射成一个7进制的数同时用一个数组记录一下所走的步数广搜的方向View Code #include<cstdio>#include<queue>#include<cstring>#include<cstdlib>#include<algorithm>#include<iostream>using namespace std;int head[10];in Read More
posted @ 2011-12-16 13:58 Because Of You Views(299) Comments(0) Diggs(0) Edit
http://blog.csdn.net/abcjennifer/article/details/5805330n堆石子排成一条直线找不到题目,就copy了别人的代码,自己写的无法验证对错View Code #include <iostream> using namespace std;#define M 101#define INF 1000000000int n,f[M][M],sum[M][M],stone[M];int main(){ int i,j,k,t; cin>>n; for(i=1;i<=n;i++) scanf("%d",& Read More
posted @ 2011-12-15 20:46 Because Of You Views(3716) Comments(0) Diggs(1) Edit
偶尔逛到这题,是2011年世界总决赛的题目,怀着一丝敬畏和期待开始看这道题目二维平面内一个多边形,可以任意旋转,使得可以将其扔进一个宽为w的槽,求w的最小值idea:开始的时候随便画了画草图,假设最后最优的情况是两个点分别在槽的两边,则一定可以绕其中的一个点旋转一个角度使得产生空隙(纸上画一画就知道了),此时的答案应该更小才是,进一步可以发现一定能够将一条边转到槽的便上,所以,有方案了。先求土包,枚举土包上的每条边,再枚举每个土包上的点,求出最大的距离,这些最大距离的最小值就是我们要的答案可惜没有1A....没有判断n为0的时候停止。。囧!View Code #include<stdio Read More
posted @ 2011-12-14 22:03 Because Of You Views(469) Comments(0) Diggs(0) Edit
给你两个数的最大公约数和最小公倍数,让你求这两个数,使得两数之和最小利用最小公倍数和最大公倍数约数的性质来解决问:为什么a*i+b/i随i的增大而减小?答:i<=sqrt(c)=sqrt(b/a),设f(i)=a*i+b/i求导:f'(i)=a-b/(i*i)因为i<=sqrt(b/a),所以f'(i)<=0所以所以i越大f(i)越小,即两个数的和就越小,所以直接从i的最大值开始枚举,一旦符合条件就输出,另外a*i也肯定是大于b/i的View Code import java.util.*;import java.io.*;import java.lang.M Read More
posted @ 2011-12-14 06:33 Because Of You Views(2158) Comments(1) Diggs(0) Edit
求小于n的孪生素数有几对。。。。暴力貌似也可以过,我用了树状数组,预处理了一下,每次输入n直接求sum(n),表示小于n的孪生素数的对数View Code #include<stdio.h>#include<string.h>#define MAX 100000int c[100000];int lowbit(int x){ return x&(-x);}void add(int x,int num){ while(x<=MAX) { c[x]+=num; x+=lowbit(x); }}int sum(int x){ int ans... Read More
posted @ 2011-12-14 05:20 Because Of You Views(277) Comments(0) Diggs(0) Edit
链接http://www.rqnoj.cn/Problem_6.html题目描述题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件电脑 打印机,扫描仪书柜 图书书桌 台灯,文具工作椅 无 如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西.. Read More
posted @ 2011-12-13 12:39 Because Of You Views(447) Comments(0) Diggs(0) Edit
依赖关系形成一棵树,要选子节点必先选择其父节点关键:把背包放在树上来做,也就是树上的01背包View Code #include<stdio.h>#include<string.h>#include<vector>using namespace std;struct node{ int v,next;}edge[10010];int head[110];int dp[110][110];int n,m,tot;void add(int s,int t){ edge[tot].v=t; edge[tot].next=head[s]; head[s]=tot++ Read More
posted @ 2011-12-12 20:42 Because Of You Views(524) Comments(0) Diggs(0) Edit
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 42 下一页