abc369 D - Bonus EXP

Jeanny發表於2024-09-02

一句話題意:
給你一個序列,對每一個數字你可以選擇打或者不打,當打的次數為偶數時,獎勵翻1倍(2*ai),奇數時1倍(ai),不打獎勵為0。求最大得分。

我真的傻叉了。。。第二維表示奇偶性f[][],而我一開始表示當前位置打不打。。。

#include<bitsstdc++.h>
#include<climits>
#define int long long
using namespace std;
int n, a[200005], g[200005][3],f[200005][3];
signed main(){
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin>>n; for(int i = 1; i <= n; i++) cin>>a[i];
    f[0][0] = 0;
    f[0][1] = LONG_LONG_MIN; 
	for(int i = 1; i <= n; i++) {
		f[i][1] = max (f[i - 1][1], f[i - 1][0] + a[i]);
		f[i][0] = max (f[i - 1][0], f[i - 1][1] + a[i] * 2);
	} 

    cout<<max(f[n][0], f[n][1])<<endl;
    return 0;
}

以下是我s的程式碼

// for(int i = 1; i <= n; i++){     
    //     if(g[i-1][1] % 2 == 1){//ji
    //         if(f[i-1][1] + 2 * a[i] > f[i][1]){
    //             f[i][1] = f[i-1][1] + 2 * a[i];
    //             g[i][1] = g[i-1][1] + 1;
    //         }
    //         if(f[i-1][1] > f[i][0]){
    //             f[i][0] = f[i-1][1];
    //             g[i][0] = g[i-1][1];
    //         }  
    //     }
    //     if(g[i-1][1] % 2 == 0){//ou
    //         if(f[i-1][1] + a[i] > f[i][1]){
    //             f[i][1] = f[i-1][1] + a[i];
    //             g[i][1] = g[i-1][1] + 1;
    //         }
    //         if(f[i-1][1] > f[i][0]){
    //             f[i][0] = f[i-1][1];
    //             g[i][0] = g[i-1][0];
    //         }
    //     }
    //     if(g[i-1][0] % 2 == 1){//上一個沒打,到i-1是奇數
    //         if(f[i-1][0] + 2 * a[i] > f[i][1]){
    //             f[i][1] = f[i-1][0] + 2 * a[i];
    //             g[i][1] = g[i-1][0] + 1;

    //         }
    //         if(f[i-1][0] > f[i][0]){
    //             f[i][0] = f[i-1][0];
    //             g[i][0] = g[i-1][0];
    //         }
    //     }
    //     if(g[i-1][0] % 2 == 0){//上一個沒打,到i-1是偶數
    //         if(f[i-1][0] + a[i] > f[i][1]){
    //             f[i][1] = f[i-1][0] + a[i];
    //             g[i][1] = g[i-1][0] + 1;
    //         }
    //         if(f[i-1][0] > f[i][0]){
    //             f[i][0] = f[i-1][0];
    //             g[i][0] = g[i-1][0];
    //         }
    //     }
    // }
    // cout<<f[4][0]<<endl;
    // cout<<g[4][0]<<endl;

相關文章