Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值。 教主最喜欢3种树,这3种树的高度分别为10,20,30。教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高。

【输入格式】

输入文件garden.in的第1行为一个正整数n,表示需要种的树的棵树。 接下来n行,每行3个不超过10000的正整数ai,bi,ci,按顺时针顺序表示了第i个位置种高度为10,20,30的树能获得的观赏价值。 第i个位置的树与第i+1个位置的树相邻,特别地,第1个位置的树与第n个位置的树相邻。

【输出格式】

输出文件garden.out仅包括一个正整数,为最大的观赏价值和。

【数据规模】

对于20%的数据,有n≤10; 对于40%的数据,有n≤100; 对于60%的数据,有n≤1000; 对于100%的数据,有4≤n≤100000,并保证n一定为偶数。

Sample Input1

4

1 3 2

3 1 2

3 1 2

3 1 2

Sample Output1

11

【样例说明】

第1~n个位置分别种上高度为20,10,30,10的树,价值最高。

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u121

【题解】



第一个位置确定后,剩余的状态才能搞出来;

4种情况;

设f[n][4];

1 种高度为10的树

2 种高度为20的树,且两边为30

3 种高度为20的树,且两边为10

4 种高度为30的树

f[i][1] = max(f[i-1][3],f[i-1][4])+a[i][1];

f[i][2] = f[i-1][4]+a[i][2];

f[i][3] = f[i-1][1]+a[i][2];

f[i][4] = max(f[i-1][2],f[i-1][1])+a[i][3];

枚举第一个高度是什么(4种情况);

根据第一个状态可以确定第n个状态;获取答案就好;



【完整代码】

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second typedef pair<int,int> pii;
typedef pair<LL,LL> pll; void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} const int MAXN = 1e5+100;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f; int n;
int a[MAXN][4];
int f[MAXN][5];//1 种高度为10的树
/*
2 种高度为20的树,且两边为30
3 种高度为20的树,且两边为10
4 种高度为30的树
*/ int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);
rep1(i,1,n)
rep1(j,1,3)
rei(a[i][j]);
//第一颗状态为1
int ans = 0;
memset(f,-INF,sizeof(f));
f[1][1] = a[1][1];
rep1(i,2,n)
{
f[i][1] = max(f[i-1][3],f[i-1][4])+a[i][1];
f[i][2] = f[i-1][4]+a[i][2];
f[i][3] = f[i-1][1]+a[i][2];
f[i][4] = max(f[i-1][2],f[i-1][1])+a[i][3];
}
ans = max(ans,max(f[n][3],f[n][4])); memset(f,-INF,sizeof(f));//第一颗状态为2
f[1][2] = a[1][2];
rep1(i,2,n)
{
f[i][1] = max(f[i-1][3],f[i-1][4])+a[i][1];
f[i][2] = f[i-1][4]+a[i][2];
f[i][3] = f[i-1][1]+a[i][2];
f[i][4] = max(f[i-1][2],f[i-1][1])+a[i][3];
}
ans = max(ans,f[n][4]); memset(f,-INF,sizeof(f));//第一颗状态为3
f[1][3] = a[1][2];
rep1(i,2,n)
{
f[i][1] = max(f[i-1][3],f[i-1][4])+a[i][1];
f[i][2] = f[i-1][4]+a[i][2];
f[i][3] = f[i-1][1]+a[i][2];
f[i][4] = max(f[i-1][2],f[i-1][1])+a[i][3];
}
ans = max(ans,f[n][1]); memset(f,-INF,sizeof(f));//第一颗状态为4
f[1][4] = a[1][3];
rep1(i,2,n)
{
f[i][1] = max(f[i-1][3],f[i-1][4])+a[i][1];
f[i][2] = f[i-1][4]+a[i][2];
f[i][3] = f[i-1][1]+a[i][2];
f[i][4] = max(f[i-1][2],f[i-1][1])+a[i][3];
}
ans = max(ans,max(f[n][1],f[n][2]));
printf("%d\n",ans);
return 0;
}

最新文章

  1. 无法启动调试。未安装Silverlight Developer运行时。最新运行时可以从以下地址下载: http://go.microsoft.com/fwlink/?LinkId=146060.
  2. ThinkPHP配置信息
  3. CentOS下apache绑定域名
  4. 《GK101任意波发生器》升级固件发布(版本:1.0.1build803)
  5. 【Tech】android真机测试——小米3
  6. 应用JConsole学习Java GC
  7. C++ AMP 介绍(两)
  8. 【JAVASCRIPT】React + Redux
  9. win10环境下利用pyinstaller把python代码(.py)打包成可执行文件(.exe)
  10. AngularJS进阶(九)控制器controller之间如何通信
  11. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
  12. Going from u to v or from v to u? POJ - 2762(强连通 有向最长路径)
  13. TensorFlow下利用MNIST训练模型并识别自己手写的数字
  14. git hub 第一篇
  15. 记一次升级Tomcat
  16. 如何用nginx在本地把9000端口转发到80端口上
  17. Android--Android Studio 打开ADM报错
  18. Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。
  19. Django的模板继承
  20. POJ1579:Function Run Fun

热门文章

  1. HDU1050:Moving Tables
  2. [Javascript] Identify the most important words in a document using tf-idf in Natural
  3. Zabbix主动代理模式 + 主动模式agent客户端
  4. 洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery
  5. 关于后台接收参数为null的问题之ajax--contentType
  6. vanzo-代码共享平台地址
  7. Nginx详细编译参数
  8. ORACLE10g R2【单实例 FS→单实例FS】
  9. GO语言学习(十六)Go 语言结构体
  10. C# 实现Ajax的方式总结