社区讨论
0分玄关求调,讲会可关!
P10111[GESP202312 七级] 纸牌游戏参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mjuu5eiw
- 此快照首次捕获于
- 2026/01/01 10:38 2 个月前
- 此快照最后确认于
- 2026/01/03 17:20 2 个月前
样例甚至都没有过,求调 qwq !
分代码:
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 条回复,欢迎继续交流。
正在加载回复...