您的位置:首页 > 其它

绕圈拿红包的问题(动态规划)

2016-09-20 20:28 92 查看
我记得是美团的笔试题吧,记不清了,原题是n个红包,首尾相连,不能拿相邻的两个,求最多能拿多少钱。

这里只处理了3个以上的红包,3个以下,直接取最大那个就可以了。

#include <iostream>

#include <string>

#include <vector>

#include<sstream>

#include<algorithm>

#include<stack>

#include<map>

using namespace std;

int main() {
int s1;

while (cin >> s1) {

vector<int>rec;
for (int i = 0; i < s1; i++)
{

int tmp = 0;

cin >> tmp;

rec.push_back(tmp);

}
rec.push_back(rec[0]);//注意这里,保证成圈
vector<int>dp(s1 + 2, 0);
dp[0] = rec[0];
dp[1] = rec[1];
dp[2] = rec[2];
for (int i = 3; i < s1 + 1; i++)
{

dp[i] = rec[i] + max(dp[(i - 2)], dp[(i - 3)]);

}
for (int i = 0; i < s1 + 2; i++)
cout << dp[i] << endl;
cout << "a" << endl;
cout << max(dp[s1 - 1], dp[s1]);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: