其他分享
首页 > 其他分享> > 种树

种树

作者:互联网

code

#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int MIN=-0x3f3f3f3f,maxn=35;
int N,M,val[maxn],dp[maxn][maxn];

int solve(){
	for(int i=1;i<=M-1;++i){
		dp[1][i]=dp[2][i]=MIN;
	}
	for(int i=3;i<N;++i){
		for(int j=1;j<=M-1;++j){
			dp[i][j]=max(dp[i-2][j-1]+val[i],dp[i-1][j]);
		}
	}
	int ans1=dp[N-1][M-1]+val[1];
	
	memset(dp,0,sizeof(dp));
	for(int i=1;i<M+1;++i){
		dp[0][i]=dp[1][i]=MIN;
	}
	for(int i=2;i<=N;++i){
		for(int j=1;j<=M;++j){
			dp[i][j]=max(dp[i-2][j-1]+val[i],dp[i-1][j]);
		}
	}
	int ans2=dp[N][M];
	return ans1>ans2?ans1:ans2;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	cin>>N>>M;
	for(int i=1;i<=N;++i){
		cin>>val[i];
	}
	if(M>N/2){
		cout<<"Error!";
		return 0;
	}
	cout<<solve();

	return 0;
}

Q

资源限制
时间限制:1.0s   内存限制:256.0MB
  种树
问题描述
  A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门 得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤 肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。
  最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度总和最大。如果无法将m棵树苗全部种上,给出无解信息。
输入格式
  输入的第一行包含两个正整数n、m。
  第二行n个整数Ai。
输出格式
  输出一个整数,表示最佳植树方案可以得到的美观度。如果无解输出“Error!”,不包含引号。
样例输入
7 3
1 2 3 4 5 6 7
样例输出
15
样例输入
7 4
1 2 3 4 5 6 7
样例输出
Error!
数据规模和约定
  对于全部数据,满足1<=m<=n<=30;
  其中90%的数据满足m<=n<=20
  -1000<=Ai<=1000

标签:int,位置,样例,maxn,种树,include
来源: https://www.cnblogs.com/jeseesmith/p/15903464.html