具体题目见 《算法艺术与信息学竞赛》P123
或 http://tyvj.cpwz.cn/Problem_Show.asp?id=1227 (可提交)
以下是代码(转自:http://www.cnblogs.com/jiaohuang/archive/2010/10/20/1856294.html)
1 /* 2 方块消除 3 先压缩下状态用把每种颜色压到一位,记录下每一位的长度 4 状态方程式dp[i][j][k] = max(dp[i][j-1][0] + (len[j]+k)^2 , dp[i][p][len[j]+k] + dp[p+1][j-1][0] ) 5 k表示前面剩余的量。 6 */ 7 #include8 #include 9 #include 10 using namespace std; 11 12 #define MX 210 13 14 int box[MX] , len[MX] , color[MX]; 15 int f[MX][MX][MX] , L; 16 17 int Findmax(int a , int b , int rest){ 18 if(f[a][b][rest] != -1) 19 return f[a][b][rest]; 20 21 f[a][b][rest] = Findmax(a,b-1,0)+(len[b]+rest)*(len[b]+rest); 22 for(int i=a ; i