zoukankan      html  css  js  c++  java
  • 教主的花园

    题目描述

    教主有着一个环形的花园,他想在花园周围均匀地种上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仅包括一个正整数,为最大的观赏价值和。

    输入输出样例

    输入样例#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一定为偶数。

    思路:DP

    三维DP [i(1~n)(位置)][j(0,1,2)(树的种类)][k(0,1)(上升||下降)]

    然后,只得了80分,因为第一棵的情况是要枚举的,而我直接从第三棵树开始,按环状DP的一般做法,乘二除二了。

    代码实现:

     1 #include<cstdio>
     2 const int maxn=1e5+10;
     3 int n,ans;
     4 int a[maxn],b[maxn],c[maxn];
     5 int f[maxn][3][2];
     6 inline int min_(int x,int y){return x<y?x:y;}
     7 inline int max_(int x,int y){return x>y?x:y;}
     8 int main(){
     9     scanf("%d",&n);
    10     for(int i=1;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);
    11     for(int i=2;i<=n;i++){
    12         f[i][0][0]=a[i]+max_(f[i-1][1][1],f[i-1][2][1]);
    13         f[i][1][0]=b[i]+f[i-1][2][1];
    14         f[i][1][1]=b[i]+f[i-1][0][0];
    15         f[i][2][1]=c[i]+max_(f[i-1][0][0],f[i-1][1][0]);
    16     }
    17     ans=max_(ans,a[1]+f[n][1][1]);
    18     ans=max_(ans,a[1]+f[n][2][1]);
    19     ans=max_(ans,b[1]+f[n][0][0]);
    20     ans=max_(ans,b[1]+f[n][2][1]);
    21     ans=max_(ans,c[1]+f[n][0][0]);
    22     ans=max_(ans,c[1]+f[n][1][0]);
    23     printf("%d
    ",ans);
    24     return 0;
    25 }

    有段时间没做DP题了。

  • 相关阅读:
    xls与csv文件的区别
    青音,经典爱情语录
    win7用户账户自动登录方法汇总
    How to using Procedure found Lead Blocker
    FTS(3) BSD 库函数手册 遍历文件夹(二)
    FTS(3) BSD 库函数手册 遍历文件夹(一)
    DisplayMetrics类 获取手机显示屏的基本信息 包括尺寸、密度、字体缩放等信息
    About App Distribution 关于应用发布
    FTS(3) 遍历文件夹实例
    OpenCV 2.1.0 with Visual Studio 2008
  • 原文地址:https://www.cnblogs.com/J-william/p/6735704.html
Copyright © 2011-2022 走看看