青少年编程知识记录 codecoming

【题解】取数

【题目描述】

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



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:题解目录 浏览: