社区讨论

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 条回复,欢迎继续交流。

正在加载回复...