Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

求大牛帮忙看看啊!!!

Posted by hejunfei at 2011-10-12 23:42:33 on Problem 1390
能找到的数据都测试了,输出都是正确的,但是提交就wrong,求大牛帮忙看看,感激不尽
错误代码如下:

#include <iostream>
using namespace std;

#define MAX(a, b) a>b?a:b
#define N 202

int color[N], len[N], after[N];
int dp[N][N][N];

int main()
{
	int cas, m, n;
    int i, j, l, r, k, p, id;
    int seq[N], cnt;
	bool vis[N];
	
	cas = 1;
	scanf("%d", &m);
	while(m--)
	{
		scanf("%d", &n);
		scanf("%d", &seq[1]);
		id = cnt = 1;
        for(i = 2; i <= n; i++){
            scanf("%d", &seq[i]);
			if(seq[i] == seq[i-1])
				cnt++;
			else {
				color[id] = seq[i-1];
				len[id++] = cnt;
				cnt = 1;
			}
		}
		color[id] = seq[n];
		len[id++] = cnt;
		
		memset(vis, false, sizeof(vis));
		memset(after, -1, sizeof(after));
		for(i = 1; i < id-2; i++){  //after[i] 的值为下一段与第i段颜色相同的下标
			if(vis[i]) continue;
			int tmp = i;
			for(j = i+2; j < id; j++)
				if(color[tmp] == color[j]){
					after[tmp] = j;
					tmp = j++;
					vis[j] = true;
				}
		}
		
		memset(dp, 0, sizeof(dp));
		for(j = 1; j < id; j++){  //遍历长度
			for(l = 1; l+j-1 < id; l++){
				r = l+j-1;
				for(i = after[r], k = 0;; i = after[i]){
					if(j == 1)
						dp[l][r][k] = (len[r]+k)*(len[r]+k);
					else {
						dp[l][r][k] = dp[l][r-1][0]+(len[r]+k)*(len[r]+k);
						for(p = r-2; p >= l; p--)
							if(color[p] == color[r])
								dp[l][r][k] = MAX(dp[l][r][k], dp[l][p][k+len[r]]+dp[p+1][r-1][0]);
					}
					if(i == -1) break;
					else k += len[i];
				}
			}
		}
		printf("Case %d: %d\n", cas++, dp[1][id-1][0]);
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator