社区讨论

建议加强数据

P1133教主的花园参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo7s7wbj
此快照首次捕获于
2023/10/27 06:54
2 年前
此快照最后确认于
2023/10/27 06:54
2 年前
查看原帖
RT,我通过将第一个位置挪到第n+1个位置解决了环形
CPP
#include <bits/stdc++.h>

#define ll long long
const int MAXN = 301010;
const int inf = 1e9 + 7;

using namespace std;

int f[MAXN][3][2];
int n, ans;
int a[MAXN][3];

inline int read( ){
    int x = 0 ; short w = 0 ; char ch = 0;
    while( !isdigit(ch) ) { w|=ch=='-';ch=getchar();}
    while( isdigit(ch) ) {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
    return w ? -x : x;
}

int main( ){
	
	n = read( );
	
	for( int i = 1; i <= n; i++ )
		for( int j = 0; j <= 2; j++ )
			a[i][j] = read( );
	
	a[n+1][0] = a[1][0];
	a[n+1][1] = a[1][1];
	a[n+1][2] = a[1][2];
	
	for( int i = 2; i <= n + 1; i++ ){
		f[i][0][0] = max( f[i-1][2][1], f[i-1][1][1] ) + a[i][0];
		f[i][1][1] = f[i-1][0][0] + a[i][1];
		f[i][1][0] = f[i-1][2][1] + a[i][1];
		f[i][2][1] = max( f[i-1][1][0], f[i-1][0][0] ) + a[i][2];
 	}
 	
 	for( int i = 0; i <= 2; i++ )
 		for( int j = 0; j <= 1; j++ )
 			ans = max( ans, f[n+1][i][j] );
 	
 	cout << ans;

	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...