【动态规划】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 ...
随机推荐
- Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
一.如何学习大规模数据集? 在训练样本集很大的情况下,我们可以先取一小部分样本学习模型,比如m=1000,然后画出对应的学习曲线.如果根据学习曲线发现模型属于高偏差,则应在现有样本上继续调整模型,具体 ...
- python 正则表达式口诀
正则其实也势利,削尖头来把钱揣: (指开始符号^和结尾符号$) 特殊符号认不了,弄个倒杠来引路: (指\. \*等特殊符号) 倒杠后面跟小w, 数字字母来表示: (\w跟数字字母;\d跟数字) ...
- 【bzoj1923】外星千足虫
这个gauss消元有点naive啊. 由于只有01,位操作显然是方便的多. 那么用bitset代替之前的增广矩阵就行了. #include<bits/stdc++.h> #define N ...
- git subtree:无缝管理通用子项目
移动互联网的爆发以及响应式页面的尴尬症,开发web和mobile项目成为了标配,当然实际情况下,会有更多的项目. 多项目开发对于前端来说是个很大的挑战✦ 重复,重复的前端架构,重复的前端依赖,重复的工 ...
- printf格式化输出
基本格式 printf [format] [文本1] [文本2] .. 常用格式替换符 %s 字符串 %f 浮点格式 %c ASCII字符,即显示对应参数的第一个字符 %d,%i 十进制整数 %o 八 ...
- shell常见操作整理(更新)
查看文件第20到30行的内容 法一:[root@oldboy ~]# seq 100 > ett.txt [root@oldboy ~]# head -30 ett.txt | tail -11 ...
- echarts断点连线问题 终级
/** * * 测试关系图 graph type* */var coors1 = [['1', 0],['2', 182],['5', 290],['6', 330],['7', 310],['10' ...
- 【python】pymongo中正则查询时的转义问题
在查询mongo时用到了正则查询 设字符串为 str = '/ab/cd.ef?g=' 直接用正则查询没有匹配. collection.find({"re":{'$regex' ...
- 微信小程序 - video组件poster无效 / 视频播放列表
在做有关微信小程序有关视频播放页面的时候,遇到video组件设置poster无效果,然后查了下poster属性:视频封面的图片网络资源地址,如果 controls 属性值为 false 则设置 pos ...
- K8s的内部Pod之间都不通,搞了快两天
试了不亚于二十种方法,绝望的时候,回到了家. 想手工安装,又遇到flannel在手工下,会更改docker启动项的不完善. cni,或许就是k8s的大方向吧. 最后,抱着试一试的态度,将flannel ...