/*******************************************************************************
Source Code
Problem: 1390 User: new_star
Memory: 32040K Time: 1578MS
Language: C++ Result: Accepted
*******************************************************************************/
//Source Code
#include<iostream>
using namespace std;
int color[201] , len[201], score[201][201][201], boxesNum, colorsNum;
int main( void )
{ int dp( int, int, int );
int casesNum;
cin >> casesNum;
for ( int cn = 1; cn <= casesNum; cn++ ){
int tmp;
len[1] = 1; colorsNum = 1;
cin >> boxesNum;
cin >> color[colorsNum];
for ( int bn = 2; bn <= boxesNum; bn++ ){
cin >> tmp;
if ( tmp == color[colorsNum] ) len[colorsNum]++;
else{
colorsNum++;
color[colorsNum] = tmp; len[colorsNum] = 1;
}
}
for ( int i = 0; i <= colorsNum; i++ )
for ( int j = 0; j <= colorsNum; j++ )
for ( int k = 0; k <= boxesNum; k++ )
score[i][j][k] = -1;
cout << "Case " << cn << ": " << dp( 1, colorsNum, 0 ) << endl;
}
return 0;
}
int dp( int i, int j, int k )
{ int sum;
if ( score[i][j][k] >= 0 ) return score[i][j][k];
if ( j+1 == i && k == 0 ) return 0;
sum = dp( i, j-1, 0 )+(len[j]+k)*(len[j]+k );
for ( int jj = j-1; jj >= i; jj-- )
if ( color[jj] == color[j] ){
int tmp = dp( i, jj, k+len[j] )+dp( jj+1, j-1, 0 );
if ( sum < tmp ) sum = tmp;
}
score[i][j][k] = sum;
return score[i][j][k];
}
POJ1390--blocks.rar
4星 · 超过85%的资源 需积分: 10 156 浏览量
2008-08-01
16:37:23
上传
评论
收藏 66KB RAR 举报
brabt_king
- 粉丝: 0
- 资源: 6
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第39题组合总和.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第38题外观数列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第37题解数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第36题有效的数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第35题搜索插入位置.zip
- index.wxml
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈