大富翁游戏
Posted 顾文繁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大富翁游戏相关的知识,希望对你有一定的参考价值。
大富翁游戏规则如下
玩家起始会获得一定资本M金币
玩家每一次可以走一个格,或者跳两个格;走一格耗费2个金币能量;跳两个格,耗费3个金币能量;金币只有满足能量消耗时,才能继续往下走
玩家每走到一个格,会得到这个格的奖励,每个格的奖励金币数为非负整数
当玩家走到这个格后,总金币数不足以支持下一步金币消耗时,则不能继续往下走,游戏结束
玩家第一步可以选择走一步进第1格或者跳2步进第2格起始,玩家可以选择在任意一格结束游戏
问玩家游戏中,最多能得到多少个金币?
这是一个典型的动态规划问题。动态转移方程的总体思路就是,判断前一步和前两步的花费,奖励和损失哪个大。
dp[i]是走到第i步的最大盈利。
动态转移方程:dp[i] = max(max(0, dp[i-1] + nums[i-1]-2), dp[i-2] + nums[i] -3)
然后用一个变量记录最大值。
#include <bits/stdc++.h>
using namespace std;
int main()
int M, num;
cin >> M;
vector<int> nums;
while(cin >> num)
nums.push_back(num);
int n = nums.size();
vector<int> dp(n+1, 0);
dp[0] = M;
int ret = 0;
for(int i = 1;i <= n;i++)
if(dp[i-1] > 1)
dp[i] = max(0, dp[i-1] + nums[i-1] - 2);
if(i-2 >= 0 && dp[i-2] > 2)
dp[i] = max(dp[i], dp[i-2] + nums[i-1] - 3);
ret = max(dp[i], ret);
cout << ret << endl;
return 0;
以上是关于大富翁游戏的主要内容,如果未能解决你的问题,请参考以下文章
飞行棋游戏情侣终极版内容,求iphone4蓝牙游戏,譬如:大富翁,飞行
Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3