• BZOJ 3997 TJOI2015 组合数学


    分析一下样例就可以知道,求的实际上是从左下角到右上角的最长路

    因为对于任意不在这个最长路的上的点,都可以通过经过最长路上的点的路径将这个点的价值减光

    (可以用反证法证明)

    之后就是一个非常NOIP的DP了

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
     
    const int maxn=1010;
    int T,n,m;
    int f[maxn][maxn];
    int map[maxn][maxn];
    void cmax(int &a,int b){if(a<b)a=b;return;}
    void read(int &num){
        num=0;char ch=getchar();
        while(ch<'!')ch=getchar();
        while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();
    }
     
    int main(){
        read(T);
        while(T--){
            read(n);read(m);
            for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)read(map[i][j]);
            memset(f,0,sizeof(f));
            for(int i=n;i>=1;--i){
                for(int j=1;j<=m;++j){
                    cmax(f[i][j],f[i+1][j]);
                    cmax(f[i][j],f[i][j-1]);
                    cmax(f[i][j],f[i+1][j-1]+map[i][j]);
                }
            }printf("%d
    ",f[1][m]);
        }return 0;
    }
    

      

  • 相关阅读:
    shell--练习--简易计算器
    shell--运算符
    shell--传递参数
    PHP数学函数的练习
    PDO对数据库的操作
    PHP实现手机短信的验证
    ThinkPHP框架 _ 学习16
    ThinkPHP框架 _ 学习15
    ThinkPHP框架 _ 学习14
    ThinkPHP框架 _ 学习13
  • 原文地址:https://www.cnblogs.com/joyouth/p/5392579.html
Copyright © 2020-2023  润新知