【u121】教主的花园

来源:互联网 发布:价值投资数据类app 编辑:程序博客网 时间:2024/05/02 06:11

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 secondtypedef 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;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 绿色抛光膏干了怎么办 不锈钢被盐酸弄黑了怎么办 不锈钢被草酸洗了怎么办 不锈钢洗菜盆被草酸腐蚀了怎么办 汽油发电机加了柴油怎么办 装载机发动机加入齿轮油怎么办 印尼的FromE错了怎么办 寄快递被弄坏了怎么办 福田口岸手表被扣怎么办? 网页显示与服务器连接失败怎么办 唯品会中发货无法清关怎么办 国际快递被海关扣了怎么办 我想开一家物流公司手续怎么办? 物流公司把我的货弄丢了怎么办 物流公司压司机工资怎么办 立元增压泵不出水怎么办 高浊度pac不沉怎么办 集水池中沉积大量污泥怎么办 电脑qq截图不好使怎么办 捡了个手机需要指纹怎么办 手机锁屏锁住了怎么办 三星屏锁忘记了怎么办 文字下面有蓝色直线怎么办 苹果x不能截屏了怎么办 u盘在电脑上打不开怎么办 电脑桌面上文档剪切了怎么办 苹果官网查不到保修日期怎么办 吃了发霉的花生怎么办 鸡吃大蒜多了怎么办 玖瑰花叶子黄怎么办 羊偷吃腥油和花生饼吃多了怎么办 肉牛眼睛有点变黄少吃东西怎么办 黑坑草鱼不开口怎么办 花生和瓜子受潮皮了怎么办? 菜叶上长了腻虫怎么办 磨辊耐磨层脱落怎么办 磨辊耐磨层小块脱落怎么办 密封胶皮圈松了怎么办 汽筒里胶皮垫密封不严怎么办 磁耦气缸脱磁了怎么办 无杆气缸行程大怎么办