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时,有5个数分别为:13,18,28,45,21
此时,有许多种取法,如: 13,28,21 和为62
13, 45 和为58
18,45 和为63
……….
和为63应该是满足要求的一种取法
输入
第一行是一个整数N
第二行有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;
}