QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#317998#5146. SkillsunclezhouRE 0ms0kbC++202.9kb2024-01-30 10:07:382024-01-30 10:07:38

Judging History

你现在查看的是最新测评结果

  • [2024-01-30 10:07:38]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-01-30 10:07:38]
  • 提交

answer


#include <bits/stdc++.h>

using namespace std;

const int N=1e3+10;

int dp[N][210][210][210];



void solve(){
    int n;
    cin>>n;
    vector<int> a1(n+1),a2(n+1),a3(n+1);
    for(int i=0;i<n;i++){
        cin>>a1[i]>>a2[i]>>a3[i];
    }
    memset(dp,0,sizeof dp);
    for(int i=0;i<n;i++){ //?i?
        for(int j=0;j<=min(i,210);j++){ //???j??
            for(int k=0;k<=min(i,210);k++){ //???k??
                int j1=j+1;
                int k1=k+1;
                if(!j) j1=0;
                if(!k) k1=0;
                
                dp[i+1][1][j1][k1]=max(dp[i+1][1][j1][k1],dp[i][0][j][k]+a1[i]-j-k);
                dp[i+1][0][1][k1]=max(dp[i+1][0][1][k1],dp[i][0][j][k]+a2[i]-k);
                dp[i+1][0][j1][1]=max(dp[i+1][0][j1][1],dp[i][0][j][k]+a3[i]-j);
                dp[i+1][1][0][k1]=max(dp[i+1][1][0][k1],dp[i][j][0][k]+a1[i]-k);
                dp[i+1][j1][1][k1]=max(dp[i+1][j1][1][k1],dp[i][j][0][k]+a2[i]-j-k);
                dp[i+1][j1][0][1]=max(dp[i+1][j1][0][1],dp[i][j][0][k]+a3[i]-j);
                dp[i+1][1][j1][0]=max(dp[i+1][1][j1][0],dp[i][j][k][0]+a1[i]-j);
                dp[i+1][j1][1][0]=max(dp[i+1][j1][1][0],dp[i][j][k][0]+a2[i]-j);
                dp[i+1][j1][k1][1]=max(dp[i+1][j1][k1][1],dp[i][j][k][0]+a3[i]-j-k);
                dp[i+1][1][j1][k1]=max(dp[i+1][1][j1][k1],dp[i][1][j][k]+a1[i]-j-k);
                dp[i+1][2][1][k1]=max(dp[i+1][2][1][k1],dp[i][1][j][k]+a2[i]-1-k);
                dp[i+1][2][j1][1]=max(dp[i+1][2][j1][1],dp[i][1][j][k]+a3[i]-j-1);
                dp[i+1][1][2][k1]=max(dp[i+1][1][2][k1],dp[i][j][1][k]+a1[i]-1-k);
                dp[i+1][j1][1][k1]=max(dp[i+1][j1][1][k1],dp[i][j][1][k]+a2[i]-j-k);
                dp[i+1][j1][2][1]=max(dp[i+1][j1][2][1],dp[i][j][1][k]+a3[i]-j-1);
                dp[i+1][1][j1][2]=max(dp[i+1][1][j1][2],dp[i][j][k][1]+a1[i]-j-1);
                dp[i+1][j1][1][2]=max(dp[i+1][j1][1][2],dp[i][j][k][1]+a2[i]-j-1);
                dp[i+1][j1][k1][1]=max(dp[i+1][j1][k1][1],dp[i][j][k][1]+a3[i]-j-k);
                //if(i==1&&j==0&&k==0){
                //    cout<<dp[i][j][k][1]<<' '<<a2[i]<<' '<<j+1<<'\n';
                //    cout<<dp[i][j][k][1]+a2[i]-j-1<<'\n';
                //    cout<<j1<<' '<<k1<<'\n';
                //    cout<<dp[i+1][j1][1][2]<<'\n';
                //    cout<<dp[2][0][1][2]<<'\n';
                //}            
            }
        }
    }
    //cout<<"waht:";
    //cout<<dp[2][0][1][2]<<'\n';
    int ans=0;
    for(int j=0;j<=min(210,n);j++){
        for(int k=0;k<=min(210,n);k++){
            ans=max(ans,dp[n][1][j][k]);
            ans=max(ans,dp[n][j][1][k]);
            ans=max(ans,dp[n][j][k][1]);
        }
    }
    //cout<<dp[1][0][0][1]<<' '<<dp[2][0][1][2]<<' '<<dp[3][1][2][3]<<'\n';
    cout<<ans<<'\n';
}
/*
1
3
1 1 10
1 10 1
10 1 1
*/


int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

2
3
1 1 10
1 10 1
10 1 1
5
1 2 3
6 5 4
7 8 9
12 11 10
13 14 15

output:


result: