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

    本题是一道多维DP题目,那么在不打开算法标签的情况下怎么去想呢,
    首先是题目的求的是最值,比较好想到的就是动态规划。首先是本题的种植范围限在一维,但是有种类要求,可以把高度10,20,30简单理解为种类1,2,3(因为没有其他奇奇怪怪的东西)。

    我们需要一维记录位置,二维记录种类,而教主大人又有特殊审美,所以要对树之间进行判断,三维记录前一个树的种类,而植树场地又是一个环,所以...再开一维特判1和n的种类,即记录第一课树的种类。所以...int f[100010][4][4][4],虽然是4维数组但是后三维所需要记录的量(种类)不多,所以相对较小,这种方法是可行的。可以列出转移方程:

    f[i][j][x][z]=max(f[i][j][x][z],f[i-1][x][y][z]+v[i][j]);
    

    其中v[i][j]是记录当前格可产生的观赏价值。j,x,y,z都是种类。

    代码如下

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int f[100010][5][5][5];
    int v[100010][5],maxx;
    int main(){
        int n;
        scanf("%d",&n);
        for (int i=0;i<n;i++)
        {
            scanf("%d %d %d",&v[i][1],&v[i][2],&v[i][3]);
        }
        for (int i=1;i<4;i++){
            for (int j=1;j<4;j++){
                f[0][i][j][i]=v[0][i];
            }
        }
        for (int i=1;i<n;i++)
        {
            for (int j=1;j<4;j++)
            { 
                for (int x=1;x<4;x++)
                {
                    for (int y=1;y<4;y++)
                    {
                        for (int z=1;z<4;z++)
                            if ((y>x && x<j) || (y<x && x>j))
                            {
                                f[i][j][x][z]=max(f[i][j][x][z],f[i-1][x][y][z]+v[i][j]);
                            }
                    }
                }
            }
        }
        for (int i=1;i<4;i++)
        {
            for (int j=1;j<4;j++)
            {
                for (int l=1;l<4;l++)
                {
                    if ((j<i && i>l) || (j>i && i<l)) maxx=max(maxx,f[n-1][i][j][l]);
                }
            }
        }
        printf("%d",maxx);
        return 0;
    }
    

    其实可以降维但是太懒了

  • 相关阅读:
    iOS系统中XML&JSON解析的代码实现
    ViewController之间如何传值
    如何归档自定义对象的数组
    一个小问题
    阶段性总结
    c语言以二进制的方式向文件读写一组数据
    C语言复杂声明,指针的复杂用法
    C语言中的getchar和putchar
    C语言结构体
    常量指针 和 指针常量
  • 原文地址:https://www.cnblogs.com/LSWorld/p/mutidp1.html
Copyright © 2011-2022 走看看