【动态规划】mr368-教主种树
【题目大意】
教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值。 教主最喜欢3种树,这3种树的高度分别为10,20,30。教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高。
【输入格式】
输入的第1行为一个正整数n,表示需要种的树的棵数。
接下来n行,每行3个不超过10000的正整数ai,bi,ci,按顺时针顺序表示了第i个位置种高度为10,20,30的树能获得的观赏价值。
第i个位置的树与第i+1个位置的树相邻,特别地,第1个位置的树与第n个位置的树相邻。
【输出格式】
输出仅包括一个正整数,为最大的观赏价值和。
【样例输入】
4
1 3 2
3 1 2
3 1 2
3 1 2
【样例输出】
11
【样例说明】
第1~n个位置分别种上高度为20,10,30,10的树,价值最高。
【数据规模】
对于20%的数据,有n≤10;
对于40%的数据,有n≤100;
对于60%的数据,有n≤1000;
对于100%的数据,有4≤n≤100000,并保证n一定为偶数。
【思路】
f[i][0..3]分别表示前i棵树的最大观赏价值总和。
f[i][0]当前树高度为10,且前后的树高度均大于它(这是必然的);
f[i][1]当前树高度为20,且前后的树高度均大于它;
f[i][2]当前树高度为20,且前后的树高度均小于它;
f[i][3]当前树高度为30,且前后树的高度均小于它(这也是必然的)。
接下来以上述四种情况为第一棵树进行四次dp,每一次的f[i]=max(f[n-1][上述情况对应的前一棵树的情况]),绕各树一圈直到返回起始点,如f[i][0]对应的前一棵树就是f[i-1][2]和f[i-1][3]。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
const int MAXN=+;
using namespace std;
int f[MAXN][];
/*f[i][0..3]·Ö±ð±íʾǰi¿ÃÊ÷µÄ×î´ó¹ÛÉͼÛÖµ×ܺÍ
f[i][0]µ±Ç°Ê÷¸ß¶ÈΪ10£¬ÇÒǰºóµÄÊ÷¸ß¶È¾ù´óÓÚËü£¨ÕâÊDZØÈ»µÄ£©
f[i][1]µ±Ç°Ê÷¸ß¶ÈΪ20£¬ÇÒǰºóµÄÊ÷¸ß¶È¾ù´óÓÚËü
f[i][2]µ±Ç°Ê÷¸ß¶ÈΪ20£¬ÇÒǰºóµÄÊ÷¸ß¶È¾ùСÓÚËü
f[i][3]µ±Ç°Ê÷¸ß¶ÈΪ30£¬ÇÒǰºóÊ÷µÄ¸ß¶È¾ùСÓÚËü£¨ÕâÒ²ÊDZØÈ»µÄ£©*/
int a[MAXN][];
/*a[i][j]±íʾµÚi¸öλÖõÚjÖÖÊ÷µÄÉóÃÀ¼ÛÖµ*/
int n,ans; void init()
{
scanf("%d",&n);
for (int i=;i<n;i++)
for (int j=;j<;j++) scanf("%d",&a[i][j]);
} void dp(int x)
{
for (int i=;i<;i++) f[][i]=-0x7fffffff;
f[][x]=a[][(x+)/];
for (int i=;i<n;i++)
{
f[i][]=max(f[i-][],f[i-][])+a[i][];
f[i][]=f[i-][]+a[i][];
f[i][]=f[i-][]+a[i][];
f[i][]=max(f[i-][],f[i-][])+a[i][];
}
} void mainprocess()
{
ans=-;
dp();
ans=max(ans,max(f[n-][],f[n-][]));
dp();
ans=max(ans,f[n-][]);
dp();
ans=max(ans,f[n-][]);
dp();
ans=max(ans,max(f[n-][],f[n-][]));
cout<<ans<<endl;
} int main()
{
freopen("mr368.in0","r",stdin);
freopen("mr368.ou0","w",stdout);
init();
mainprocess();
return ;
}
【动态规划】mr368-教主种树的更多相关文章
- P1133 教主的花园 (动态规划)
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢 3种树,这3种 ...
- BZOJ2151 种树(贪心+堆+链表/wqs二分+动态规划)
dp容易想到,但没法进一步优化了. 考虑贪心,每次选出价值最大的物品.但这显然是不对的因为会影响其他物品的选择. 于是考虑加上反悔操作.每次选出一个物品后,将其相邻两物品删除,再将原物品价值变为相邻两 ...
- 洛谷教主花园dp
洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...
- [luogu]P1133 教主的花园[DP]
[luogu]P1133 教主的花园 ——!x^n+y^n=z^n 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会 ...
- 楼天城楼教主的acm心路历程(作为励志用)
楼主个人博客:小杰博客 利用假期空暇之时,将这几年GCJ,ACM,TopCoder 參加的一些重要比赛作个 回顾.昨天是GCJ2006 的回顾,今天时间上更早一些吧,我如今还清晰记得3 年 前,我刚刚 ...
- [NOIP复习]第三章:动态规划
一.背包问题 最基础的一类动规问题.相似之处在于给n个物品或无穷多物品或不同种类的物品,每种物品仅仅有一个或若干个,给一个背包装入这些物品,要求在不超出背包容量的范围内,使得获得的价值或占用体积尽可能 ...
- 树形动态规划(树状DP)小结
树状动态规划定义 之所以这样命名树规,是因为树形DP的这一特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系.利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的记忆化搜索的 ...
- 洛谷P1133 教主的花园
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树 ...
- 教主的花园 dp
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢333种树,这3 ...
随机推荐
- bzoj 1856 组合
这道题有些类似卡特兰数的其中一种证明,总方案数是c(n+m,n),点(m,n)对应y=x-1对称点为(n+1,m-1),所以答案为c(n+m,n)-c(n+m,n+1). 反思:开始坐标轴画错了,结果 ...
- sql server 在作业中 远程连接 oracle mysql sqlserver 数据库
在作业中执行远程连接时,需要对本次作业执行的步骤指定特定用户 并且该用户必须拥有所需操作数据库的db_owner角色,和服务器sysadmin角色 在作业中执行远程连接时,需要做登录映射 下面是我在作 ...
- centos7系统安装配置
下载centos7 iso镜像 电脑里面本来有ubuntu系统,直接在u盘做好启动盘安装即可,选择手动分区(忘了),将原本ubuntu系统分区压缩200G.系统不要选择最小化,选择gnome的图形界面 ...
- python基础===codecs打开文件,解决文件编码格式的问题
codecs https://docs.python.org/3/library/codecs.html 我们经常用open打开文件的时候会出现各式各样的错误,编码格式的问题,等等~真的很烦 现在尽量 ...
- 如何更新远程主机上的 Linux 内核
如何更新远程主机上的 Linux 内核 http://blog.csdn.net/robertsong2004/article/details/47277121 转载至:http://www.tiny ...
- HTML+CSS+JS(+Vue)写一个通讯录组件
求各位大大的Star(*/ω\*). 没有录屏,所以上传的是图片.后面已补充录屏效果. 效果:(主要是参考小米Note3的通讯录的效果做的) 主要功能: 1. 滚动后,通讯录的模块标题会固定在顶部(图 ...
- 零基础学php的自学
我们都知道,php语言作为一种专业建站的语言,没有华而不实,而是经受住了时间考验,成为一种值得学习的语言.现在国内众多的php学校也说明,php语言在当今有着广泛的市场需求. 那么零基础的同学如何学习 ...
- [hadoop][会装]HBase集群安装--基于hadoop ha模式
可以参考部署HBase系统(分布式部署) 和基于无HA模式的hadoop下部署相比,主要是修改hbase-site .xml文件,修改如下参数即可: <property> <name ...
- tornado 模版
tornado 模版语法 取消转义 : 取消项目转义 :autoescape = None 取消模版转义:{% autoescape None %} 取消行转义 :{% raw bd %} 强制转 ...
- Author name disambiguation using a graph model with node splitting and merging based on bibliographic information
Author name disambiguation using a graph model with node splitting and merging based on bibliographi ...