转自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
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
我决定:以后每一场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