社区讨论
70分求调
P10111[GESP202312 七级] 纸牌游戏参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjsxsy3
- 此快照首次捕获于
- 2025/11/04 07:59 4 个月前
- 此快照最后确认于
- 2025/11/04 07:59 4 个月前
70分没过第7、8、9个点
纯自己写的,没参考题解
CPP#include<bits/stdc++.h>
using namespace std;
int n,a[1010],b[1010],ans=INT_MIN;
int dp[1010][3][1010],l[3][3]=
{
{1,0,2},
{2,1,0},
{0,2,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];
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
dp[i][0][0]=dp[i-1][0][0]+l[0][x]*a[i];
dp[i][1][0]=dp[i-1][1][0]+l[1][x]*a[i];
dp[i][2][0]=dp[i-1][2][0]+l[2][x]*a[i];
for(int j=1;j<i;j++)
{
for(int k=0;k<=2;k++)
{
dp[i][k][j]=INT_MIN;
dp[i][k][j]=max(dp[i-1][0][j-(k!=0)]-(k!=0)*b[j],dp[i][k][j]);
dp[i][k][j]=max(dp[i-1][1][j-(k!=1)]-(k!=1)*b[j],dp[i][k][j]);
dp[i][k][j]=max(dp[i-1][2][j-(k!=2)]-(k!=2)*b[j],dp[i][k][j]);
dp[i][k][j]+=l[k][x]*a[i];
if(i==n) ans=max(ans,dp[i][k][j]);
}
}
}
cout<<ans;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...