gpt4 book ai didi

c++ - 收集保持在一条线上时总值(value)最大的卡片(仅从角落提取)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:24 27 4
gpt4 key购买 nike

<分区>

考虑以下游戏。

庄家出一系列 s1 ...sn 牌,牌面朝上,其中每张卡片 si 都有一个值 vi。然后两名玩家轮流从序列中挑选一张牌,但是只能挑选(剩余)序列的第一张或最后一张牌。目标是收集卡片总值(value)最大。 (例如,您可以将卡片视为不同面额的钞票。)

给出一个复杂度为 O(n^2) 的算法来计算第一个玩家的最优策略(只是最大可获得的代码)。

我已经试过用 legthwise 解决它,可能解决了这里是我的代码...数组卡片具有每张卡片的值。卡片的第 0 个元素未使用且浪费(基本索引 1)!

  #include<bits/stdc++.h>
using namespace std;
int main()
{
int cards[]={0,2,100,101,1};
int n=4;
int i,j,l,sum=204;
int dp[n+1][n+1];
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
dp[i][i]=cards[i];
for(l=2;l<=n;l++)
{
for(i=1;i<=n-l+1;i++)
{
j=i+l-1;
dp[i][j]=max(cards[i]-dp[i+1][j],cards[j]-dp[i][j-1]);
}
}
printf("%d\n",(sum+dp[1][n])/2);

return 0;
}

在最后一个 print 语句中,我打印了 (sum+dp[1][n])/2 只是因为当我执行此操作时,元素是 2n,n 将被包括在内,其余的 n 将被减去,我获取包含值的总和。

虽然它给出了正确答案,但我仍然无法说出 dp[i][j] 到底代表什么!!它不代表可获得的最大值(value)(因为它不会直接给我那个值(value))。那么它表示什么是我的另一个问题??

有没有其他思路可以解决这样的问题?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com