代码求调
查看原帖
代码求调
1057934
AxB_Thomas楼主2024/10/27 23:37
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#define int long long
inline int read() {
	int x=0,f=1;char ch=getchar();
	while(ch > '9' || ch < '0'){if(ch == '-'){f = -1;}ch = getchar();}
	while(ch >= '0'&&ch <= '9'){x = x * 10 + ch - 48; ch = getchar();}
	return x * f;
}

const int N = 2e5 + 10;
const int M = 1e6 + 10;
int n,T,a[N],s[N],dp[N][2],last_same[N],val[M];
 
signed main()
{
	T = read();
	while(T--){
		memset(val,0,sizeof(val)); 
		n = read();
		for(int i = 1;i <= n;++i) {
			a[i] = read();
			last_same[i] = val[a[i]];
			val[a[i]] = i;
		}
		
		for(int i = 1;i <= n;++i) s[i] = s[i - 1] + (a[i] == a[i + 1] ? a[i] : 0);
		
		for(int i = 1;i <= n;++i) dp[i][1] = dp[i][0] = 0;
		
		for(int i = 1;i <= n;++i){
			if(a[i] != a[i - 1]){
				dp[i][0] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[last_same[i] + 1][1] + a[i] + s[i - 1] - s[last_same[i] + 1]);
				dp[i][1] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[last_same[i] + 1][0] + a[i] + s[i - 1] - s[last_same[i] + 1]);
			}else{
				dp[i][1] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[i - 1][1] + a[i]);
				dp[i][0] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[i - 1][0] + a[i]); 
			}
		}
		std::cout << std::max(dp[n][0],dp[n][1]) << '\n';
	}
	return 0;
}

应该是正解思路,为什么样例都过不了,求大佬调试

2024/10/27 23:37
加载中...