【题解】取数
【题目描述】
设有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[51],f[51]; int main(){ int n,i; cin>>n; for(i=1;i<=n;i++){ cin>>a[i]; } f[1] = a[1]; f[2] = a[2]; for(i=3;i<=n;i++){ f[i] = max(f[i-2],f[i-3]) + a[i]; } cout<<max(f[n-1],f[n]); return 0; }
扫描二维码推送至手机访问。
版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。