1553: 【基础】取数

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:7 解决:5

题目描述

设有N 个正整数(1 <= N <= 50),其中每一个均是大于等于1、小于等于300的数。
从这N个数中任取出若干个数(不能取相邻的数),要求得到一种取法,使得到的和为最大。
例如:当N=5时,有5个数分别为:13,18,28,45,21
此时,有许多种取法,如: 13,28,21 和为62
13, 45 和为58
18,45 和为63
……….

和为63应该是满足要求的一种取法

输入

第一行是一个整数N
第二行有N个符合条件的整数。

输出

一个整数,即最大和

样例输入 复制

5
13 18 28 45 21

样例输出 复制

63

提示

#include<bits/stdc++.h>
using namespace std;
int a[100],dp[100],n,i;
int main(){
    cin>>n;
    for(i = 1;i <= n;i++){
    	cin>>a[i];
	}
	dp[1]=a[1];
	dp[2]=max(a[1],a[2]);
	for(i = 3;i <= n;i++) {
		dp[i] = max(dp[i-1],a[i]+dp[i-2]);
	}
	cout<<dp[n];
	return 0;
}