zoukankan      html  css  js  c++  java
  • P1004 方格取数

    P1004 方格取数

    题解

    我们可以两遍路一起走

    f[i][j][k][l]  表示第一条路走到(x,y ),第二条路走到(k,l)时的最大值

    然后转移

    判断(x,y)(k,l)是否相同就好

    代码

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<cstdlib>                                                                             
    
    using namespace std;
    
    inline int read()
    {
        int ans=0;
        char last=' ',ch=getchar();
        while(ch<'0'||ch>'9') last=ch,ch=getchar();
        while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
        if(last=='-') ans=-ans;
        return ans;
    }
    
    int n;
    int a[10][10];
    int f[10][10][10][10]; 
    
    int main()
    {
        scanf("%d",&n);
        int x,y,z;
        while(scanf("%d%d%d",&x,&y,&z))
        {
            if(x==0&&y==0&&z==0) break;
            a[x][y]=z;
        } 
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
             for(int k=1;k<=n;k++)
                for(int l=1;l<=n;l++)
                {
                    f[i][j][k][l]=max(f[i-1][j][k-1][l],
                                  max(f[i-1][j][k][l-1],
                                  max(f[i][j-1][k-1][l],
                                  f[i][j-1][k][l-1])))
                                  +a[i][j]+a[k][l];
                    if(i==k&&j==l) f[i][j][k][l]-=a[i][j];
                }
        printf("%d",f[n][n][n][n]);        
        return 0;
    }
    
    
     

    点击获得双倍经验!

    P1006 传纸条

  • 相关阅读:
    格式化输出数字
    传教士经验
    集合
    替换
    连接
    填充
    取值
    分割
    创建日历和日期列表
    常用日期格式
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11295097.html
Copyright © 2011-2022 走看看