社区讨论

0分玄关求调,讲会可关!

P10111[GESP202312 七级] 纸牌游戏参与者 2已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mjuu5eiw
此快照首次捕获于
2026/01/01 10:38
2 个月前
此快照最后确认于
2026/01/03 17:20
2 个月前
查看原帖
样例甚至都没有过,求调 qwq !
00 分代码:
CPP
#include <iostream>
#define N 1010
using namespace std;
int a[N], b[N], c[N], n;
int dp[N][N][5];
int sum[N];
int flag[5][5] = {
        {1, 2 ,0},
        {0, 1, 2},
        {2, 0, 1}
};
int main() {
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    for(int i = 1; i < n; i++){
        cin >> b[i];
        sum[i] = sum[i - 1] + b[i];
    }
    for(int i = 1; i <= n; i++){
        cin >> c[i];
    }
    for(int i = 1; i <= n; i++){
        for(int j = 0; j < i; j++){
            dp[i][j][0] = max(dp[i - 1][max(j - 1, 0)][1], max(dp[i - 1][max(j - 1, 0)][2], dp[i - 1][j][0])) + flag[0][c[i]] * a[i];
            dp[i][j][1] = max(dp[i - 1][max(j - 1, 0)][0], max(dp[i - 1][max(j - 1, 0)][2], dp[i - 1][j][1])) + flag[1][c[i]] * a[i];
            dp[i][j][2] = max(dp[i - 1][max(j - 1, 0)][0], max(dp[i - 1][max(j - 1, 0)][1], dp[i - 1][j][2])) + flag[2][c[i]] * a[i];
        }
    }
    int answer = 0;
    for(int i = 1; i <= n; i++){
        for(int j = 0; j < i; j++){
            dp[i][j][0] -= sum[j];
            dp[i][j][1] -= sum[j];
            dp[i][j][2] -= sum[j];
            answer = max(max(answer, dp[i][j][0]), max(dp[i][j][1], dp[i][j][2]));
        }
    }
    cout << answer << endl;
    return 0;
}

回复

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

正在加载回复...