zoukankan      html  css  js  c++  java
  • bzoj 3997: [TJOI2015]组合数学

    Description

    给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走。问至少走多少次才能将财宝捡完。此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完

    Solution

    (x) 这个点不能顺路走到 (y) 当且仅当 (y)(x) 的右上角
    答案就是从左下角走到右上角的"最长路",即最长不能一次性走完的路径,其余的显然都可以顺路走掉
    用一个简单DP求出 "最长路" 即可

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1005;
    int n,m,a[N][N],f[N][N];
    void work(){
    	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[i][j]=0;
    	for(int i=n;i>=1;i--){
    		for(int j=1;j<=m;j++){
    			f[i][j]=max(f[i][j],f[i+1][j-1]+a[i][j]);
    			f[i][j]=max(f[i][j],f[i+1][j]);
    			f[i][j]=max(f[i][j],f[i][j-1]);
    		}
    	}
    	printf("%d
    ",f[1][m]);
    }
    int main(){
      freopen("pp.in","r",stdin);
      freopen("pp.out","w",stdout);
      int T;cin>>T;
      while(T--)work();
      return 0;
    }
    
    
  • 相关阅读:
    java表格的使用 单元格绘制二
    Java表格的简单使用一
    Servlet接口五种方法介绍
    C# 图片识别
    asp.net 使用rabbitmq事例
    Windows下安装使用python的Flask框架
    python中闭包的理解
    sql中遍历字符串
    asp.net mvc easyui tree
    c# Castle Windsor简单例子
  • 原文地址:https://www.cnblogs.com/Yuzao/p/8447447.html
Copyright © 2011-2022 走看看