类似背包DP。用dp[i][j](bool类型)来表示前i个数组成的和对k取模的值是否存在;状态转移方程为:if(dp[i-1][j])dp[i][get(tmp-j)]=dp[i][get(tmp+j)]=1;//get:自己写个取模函数,注意负数取模-5%7=2AC代码:View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;bool dp[10003][103];int k;int get(int x){ return x < 0 ?     Read More
posted @ 2012-08-05 22:54
To be an ACMan
Views(220)
Comments(0)
Diggs(0)
        
            
        
        
        
简单DP题意:由0-k这些数字组成的长度为n的数(并满足某个条件)的个数占所有总数的比例。(满足某个条件:各个位的数字与其相邻的数字之差不超过1.)用数组dp[i][j]表示满足以j结尾,长度为i的数的个数;则适当思考可以得状态转移方程为 : dp[i][j]=dp[i-1][j-1]+dp[i-1][j]+dp[j+1]; (0<j<k) dp[i][j]=dp[i-1][j]+dp[i-1][j+1]; (j==0) dp[i][j]=dp[i-1][j]+dp[i][j-1]; (j==k)这里要考虑是不是边界AC代码Vi...    Read More
posted @ 2012-08-05 21:53
To be an ACMan
Views(284)
Comments(0)
Diggs(0)
        
            
        
        
        
神奇的DP:用2个数组r[i],l[i]表示以第i个矩形的高度并包含这个矩形所组成的最大矩形的左右宽度的边界位置;扩展左边界:1。如果第j个矩型的高度比第i个矩阵(1<j<i)的高度低则做边界位置为i,即l[i]=j+1,终止;2。如果高(或相等),则继续向左扩展,直到符合条件1。就终止。扩展右边界:类扩展左边界。以下对于扩展左边界的解释:n(100000)数据很大,如果用以下方法做(类似暴力吧),我们模拟一下发现,如果第j个矩阵扩展的左边界已经得到,在扩展其他第i(i>j)个矩阵时做了很多第j个矩阵扩展的操作,重复了,这样做 无疑 地TLE了;错误做法:for(i=1;i&    Read More
posted @ 2012-08-05 09:24
To be an ACMan
Views(531)
Comments(0)
Diggs(0)
        
                    
                
浙公网安备 33010602011771号