求助,90分,第一个点错了
查看原帖
求助,90分,第一个点错了
549617
华悦泽楼主2023/3/14 20:46

当输入

6

1 3 2

3 1 2

1 2 3

1 3 2

2 1 3

2 3 2

应该输出17,但是我的输出18。。。

#include <bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int n,ans;
int a[MAXN],b[MAXN],c[MAXN]; //a[i]:第一种树种在第i的位置时的价值
int f[MAXN][5][5]; //i:which pos j:which tree k(last one):is the tree around bigger or smaller
void input(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
int main()
{
    input();
    for(int j=1;j<=3;j++){
        if(j==1) f[1][j][1]=f[1][j][2]=a[1];
        if(j==2) f[1][j][1]=f[1][j][2]=b[1];
        if(j==3) f[1][j][1]=f[1][j][2]=c[1];
        for(int i=2;i<=n;i++){
            f[i][1][1]=max(f[i-1][2][2],f[i-1][3][2])+a[i];
            f[i][2][1]=f[i-1][3][2]+b[i];
            f[i][2][2]=f[i-1][1][1]+b[i];
            f[i][3][2]=max(f[i-1][2][1],f[i-1][1][1])+c[i];
        }
        int cnt;
        for(int t=1;t<j;t++){
            if(ans<f[n][t][1]) ans=f[n][t][1],cnt=t;
        }
        for(int t=3;t>j;t--){
            if(ans<f[n][t][2]) ans=f[n][t][2],cnt=t;
        }
        cout<<j<<" "<<cnt<<endl;
    }
    printf("%d\n",ans);
    
    
    

    return 0;
}

2023/3/14 20:46
加载中...