马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 糖逗 于 2020-4-12 00:15 编辑
题目描述:给定一个数组,数组中的数不能连着取,求最大的和。
如[7,5,4,2,1]最大的为7+4+1
#include <iostream>
#include <vector>
using namespace std;
int dfs(vector<int> & input, int i, vector<int> & visit){
if(i >= input.size()) return 0;
if(visit[i] > 0) return visit[i];
int temp = 0;
for(int j = i+2; j < input.size(); j++){
temp = max(temp, dfs(input, j, visit));
}
visit[i] = temp + input[i];
return temp + input[i];
}
int solution(int* input, int len){
int res = 0;
vector<int> temp;
for(int i = 0 ; i < len; i++){
temp.push_back(*(input + i));
}
vector<int> visit (len, 0);
for(int i = 0; i < len; i++){
if(visit[i] == 0){
res = max(res, dfs(temp, i, visit));
}
else{
res = max(res, visit[i]);
}
}
return res;
}
int main(void){
cout << "send the len" << endl;
int len;
cin >> len;
cin.clear();
int number;
int input[len];
int i = 0;
while(cin >> number){
input[i] = number;
i++;
}
cout << solution(input, len);
return 0;
}
注意事项:
1.运用了动态规划和深度优先搜索,想法源自leetcode329. 矩阵中的最长递增路径。
2.使用数组不习惯,自行换成了vector。 |