求助!
查看原帖
求助!
334041
沉鸣cmh楼主2020/8/28 18:59

为啥WA了三个点?

#include<bits/stdc++.h>
using namespace std;
int n,zj[100005][5][2],sum;
struct p{
	int a,b,c;
}a[100005];
int dfs(int k,int gd,bool ds){int th=0;
	if(zj[k][gd][ds])return zj[k][gd][ds];if(k==n+1)return 0;
	if(ds){
		if(2>gd)th=max(th,dfs(k+1,2,false)+a[k].b);
		if(3>gd)th=max(th,dfs(k+1,3,false)+a[k].c);
	}
	else{
		if(2<gd)th=max(th,dfs(k+1,2,true)+a[k].b);
		if(1<gd)th=max(th,dfs(k+1,1,true)+a[k].a);
	}
	zj[k][gd][ds]=th;
	return th;
}
int dd(int x,int y){
	if(x==1)return a[y].a;
	if(x==2)return a[y].b;
	return a[y].c;
}
int main(){
	cin>>n;for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b>>a[i].c;
	for(int i=1;i<=3;i++)
	for(int j=1;j<=3;j++){memset(zj,0,sizeof(zj));
		if(i<j)sum=max(sum,dfs(3,j,false)+dd(i,1)+dd(j,2));
		memset(zj,0,sizeof(zj));
		if(i>j)sum=max(sum,dfs(3,j,true)+dd(i,1)+dd(j,2));
	}
	cout<<sum;
	return 0;
}
2020/8/28 18:59
加载中...