类似 《hdu 搬寝室》View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int dp[50003][4],a[50003];int main(){ int cas, n, m, i, j; scanf("%d",&cas); while(cas--) { scanf("%d",&n); a[0]=0; for(i=1;i<=n;i++) { scanf("%d"    Read More
posted @ 2012-08-09 16:38
To be an ACMan
Views(192)
Comments(0)
Diggs(0)
        
            
        
        
        
经典的区间DPdp[i][j]代表i->j区间内最多的合法括号数状态转移方程:if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j]=dp[i+1][j-1]+2;dp[i][j]=max{dp[i][k]+dp[k+1][j]};AC代码:View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace st    Read More
posted @ 2012-08-09 16:35
To be an ACMan
Views(1671)
Comments(1)
Diggs(1)
        
            
        
        
        
首先申明:这题数据有很大问题当你输入都为负数时,程序就会出错如 2 3-1 -2 -3竟然输出-3。数据库里有都为负数的情况,我用别人AC代码改了一下测试过了,的确有这情况,但答案貌似是错的。又如 2 3-1 2 -3竟然输出1.这让我郁闷了很久。设输入的数组为a[1...n],从中找出m个段,使者几个段的和为最大dp[i][j]表示前j个数中取i个段的和的最大值,其中最后一个段包含a[j]。(这很关键)则状态转移方程为:dp[i][j]=max{dp[i][j-1]+a[j],max{dp[i-1][t]}+a[j]} i-1=<t<j-1因为dp[i][j]中a[j]可能就自身    Read More
posted @ 2012-08-09 12:15
To be an ACMan
Views(2824)
Comments(2)
Diggs(0)
        
                    
                
浙公网安备 33010602011771号