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; }