zoukankan      html  css  js  c++  java
  • P1006 传纸条

    P1006 传纸条

    普通的四维dp

    (当然有一些很ok的方法然鹅我比较菜)

    $f[i][j][k][u]$表示第一张纸条在$(i,j)$,第二张在$(k,u)$

    复杂度$O(n^{4})$

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define re register
    using namespace std;
    int max(int &a,int &b) {return a>b ?a:b;}
    int n,m,a[52][52],f[52][52][52][52];
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                scanf("%d",&a[i][j]);
        f[1][2][2][1]=a[1][2]+a[2][1];
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
                for(int k=1;k<=n;++k)
                    for(int u=1;u<=m;++u){
                        if(i==k&&j==u) continue;//不能一个人传2张
                        f[i+1][j][k+1][u]=max(f[i+1][j][k+1][u],f[i][j][k][u]+a[i+1][j]+a[k+1][u]);
                        f[i+1][j][k][u+1]=max(f[i+1][j][k][u+1],f[i][j][k][u]+a[i+1][j]+a[k][u+1]);
                        f[i][j+1][k+1][u]=max(f[i][j+1][k+1][u],f[i][j][k][u]+a[i][j+1]+a[k+1][u]);
                        f[i][j+1][k][u+1]=max(f[i][j+1][k][u+1],f[i][j][k][u]+a[i][j+1]+a[k][u+1]);
                    }
        printf("%d",max(f[n-1][m][n][m-1],f[n][m-1][n-1][m]));
        return 0;
    }
  • 相关阅读:
    第一个Struts1步骤
    struts框架学习过程中的问题
    struts2笔记
    搭建struts2框架
    一个系统钩子
    TMemIniFile 与TIniFile 区别
    rc4加密
    注册dll
    delphi 功能函数大全-备份用
    VC中文件路径问题
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/9805998.html
Copyright © 2011-2022 走看看