zoukankan      html  css  js  c++  java
  • luogu 1006 传纸条

    题目大意:

    一个矩阵,求两条不相交的路径使两条路径上所有点权值和最大,两条路径起点都为左上,终点为右下

    思路:

    三维dp

    表示两条路分别走到那两个点了,其中可以枚举路径长度,两个横坐标优化为3维

    然后每个dp都可以从每个点的左边或上边转移过来

    zz题

    没有1a真是耻辱,原因是枚举横坐标的时候只考虑了横坐标小于路径长而忽略了横坐标超出矩阵边界

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #include<cstring>
     7 #include<vector>
     8 #include<map>
     9 #include<queue>
    10 #define inf 2147483611
    11 #define ll long long
    12 #define MAXN 55
    13 #define MOD
    14 using namespace std;
    15 inline int read()
    16 {
    17     int x=0,f=1;
    18     char ch;ch=getchar();
    19     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    20     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    21     return x*f;
    22 }
    23 int n,m,a[MAXN][MAXN],dp[MAXN][MAXN][MAXN*2];
    24 int main()
    25 {
    26     n=read(),m=read();
    27     for(int i=1;i<=n;i++)
    28         for(int j=1;j<=m;j++) a[i][j]=read();
    29     for(int k=2;k<=n+m;k++)
    30         for(int i=1;i<=k&&i<=n;i++)
    31             for(int j=1;j<=k&&j<=n;j++)
    32             {
    33                 if(i==j&&k!=n+m) continue;
    34                 dp[i][j][k]=max(dp[i-1][j][k-1],dp[i-1][j-1][k-1]);
    35                 dp[i][j][k]=max(dp[i][j-1][k-1],dp[i][j][k]);
    36                 dp[i][j][k]=max(dp[i][j][k-1],dp[i][j][k]);
    37                 dp[i][j][k]+=a[i][k-i+1]+a[j][k-j+1];
    38             }
    39     printf("%d",dp[n][n][n+m]);
    40 }
    View Code
  • 相关阅读:
    数据库维护单数据修改(入库单月份更改)
    Git下载GitHub上的文件
    水晶报表的步骤
    html表格及列表
    html中的a标签
    了解html标签
    常见编码方式(码表)
    了解html
    Odoo官方翻译网站
    postgresql性能的几个重要参数
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7632795.html
Copyright © 2011-2022 走看看