P1133 教主的花园 (动态规划)
题目描述
教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值。
教主最喜欢 3种树,这3种树的高度分别为 10,20,30。教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高。
输入输出格式
输入格式:
第一行为一个正整数 n ,表示需要种的树的棵树。
接下来 n 行,每行 3 个不超过 10000的正整数 $$a_i,b_i,c_i$$ ,按顺时针顺序表示了第 i 个位置种高度为 10,20,30 的树能获得的观赏价值。
第 i个位置的树与第 i+1 个位置的树相邻,特别地,第 1 个位置的树与第 n 个位置的树相邻。
输出格式:
一个正整数,为最大的观赏价值和。
输入输出样例
输入样例#1:
4
1 3 2
3 1 2
3 1 2
3 1 2
输出样例#1:
11
说明
【样例说明】
第 1 至 n 个位置分别种上高度为 20,10,30,10 的树,价值最高。
【数据规模与约定】
对于 20%的数据,有 n≤10 ;
对于 40% 的数据,有 n≤100;
对于 60% 的数据,有 n≤1000 ;
对于 100% 的数据,有 4≤n≤100000 ,并保证 n 一定为偶数。
Solution
这道题的思路蛮好想的,只是稍微多了一些限制条件.
状态定义:
\]
表示当前 i 这个点, i-1 的选择为 j , 然后 i 的选择为 k.
状态转移
枚举当前这个的点的 j 和 k,然后判断 j 和 k 的大小关系.
如 : $$ f[i][j][k] $$其中 j>k
则有前驱状态:
\]
其他亦可依次类推.
但是需要注意最后一个节点和第一个节点的大小关系区分.
为此,我们可以直接枚举一重 head.
然后在里面循环的时候注意判断最后一个节点即可.
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=100008;
int f[maxn][4][4];
int c[maxn][4],n;
int ans=-1,head;
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=3;j++)
cin>>c[i][j];
for(head=1;head<=3;head++)
{
memset(f,0,sizeof(f));
f[2][head][1]=c[1][head]+c[2][1];
f[2][head][2]=c[1][head]+c[2][2];
f[2][head][3]=c[1][head]+c[2][3];
for(int i=3;i<=n;i++)
{
for(int j=1;j<=3;j++)
for(int k=1;k<=3;k++)
{
if(j==k)continue;
else
{
if(i==n)
{
if(k==head)continue;
if(j>k&&k>head)continue;
if(j<k&&k<head)continue;
}
if(j>k)
for(int l=1;l<j;l++)
f[i][j][k]=max(f[i][j][k],f[i-1][l][j]+c[i][k]);
else
for(int l=j+1;l<=3;l++)
f[i][j][k]=max(f[i][j][k],f[i-1][l][j]+c[i][k]);
}
}
}
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
ans=max(f[n][i][j],ans);
}
cout<<ans<<endl;
return 0;
}
P1133 教主的花园 (动态规划)的更多相关文章
- [luogu]P1133 教主的花园[DP]
[luogu]P1133 教主的花园 ——!x^n+y^n=z^n 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会 ...
- P1133 教主的花园
P1133 教主的花园 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教 ...
- 洛谷P1133 教主的花园
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树 ...
- 洛谷—— P1133 教主的花园
https://www.luogu.org/problem/show?pid=1133 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都 ...
- 题解——P1133 教主的花园DP
直接设二维状态具有后效性,会爆零 然后需要加一维 然后70 看了题解之后发现没有考虑1和n的关系 考虑之后,四十 然后懵逼 突然发现自己的ans更新写错了,导致每次ans都是第一个取30的情况的解 然 ...
- 洛谷 题解 P1133 【教主的花园】
$n<=10^5 $ O(n)算法 状态 dp[i][j][k]表示在第i个位置,种j*10的高度的树,且这棵树是否比相邻两棵树高 转移 dp[i][1][0]=max(dp[i-1][2][1 ...
- 教主的花园 dp
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢333种树,这3 ...
- 洛谷 P 1133 教主的花园
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树 ...
- 【u121】教主的花园
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都 ...
随机推荐
- 并查集+思维——Destroying Array
一.题目描述(题目链接) 给定一个序列,按指定的顺序逐一删掉,求连续子序列和的最大值.例如序列1 3 2 5,按3 4 1 2的顺序删除,即依次删除第3个.第4个.第1个.第2个,答案为5 4 3 0 ...
- 47.Number of Islands(岛的数量)
Level: Medium 题目描述: Given a 2d grid map of '1's (land) and '0's (water), count the number of islan ...
- django 第一次运行出错
直接运行整个项目正常,直接运行url文件报错 报错内容: E:\Python\python.exe D:/Python储存文件/ceshiweb/ceshiweb/urls.pyTraceback ( ...
- 自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题
const reg = /^([-+]?)([0-9]+)\.([0-9]*)$/; // 判断是不是浮点数 const isFloat = function(number){ return reg. ...
- Python学习记录1
交互式解释器 模块 python序列 索引提取 序列运算 空列表 成员资格 长度最大值最小值函数 列表 list和join函数 交互式解释器 ' >>> '为提示符. 语句是用来告诉 ...
- hihoCoder-1097-Prim
这题就是prim的板子题,不过如果用end每次初始化为-1的话,我们就不需要对于每次选中的下一个点进行判断是否选中了,因为每次外层循环第一次进入都是可以的. 然后还很 (i=1:i<=n;i++ ...
- vim中使用pydiction对python代码进行补全
在配置完vim插件YouCompleteMe之后,在vim编写python的时候按tab键会报错,E121: Undefined variable: g:pydiction_location Pydi ...
- 【OS_Linux】Linux下软件的安装与卸载
1.Linux中软件安装包的分类 1) 一类是可执行的软件包,无需编译直接安装.在Windows中所有的软件包都是这种类型.安装完这个程序后,你就可以使用,但你看不到源程序.而且下载时要注意这个软件是 ...
- Python全栈工程师之html学习笔记
https://www.bilibili.com/video/av15241731 笔记来源:黑马程序员 HTML(Hyper Text Markup Language):超文本标签语言 HTML标签 ...
- Hive 执行查询语句报错,由于内存空间不足导致
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Can ...