码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 3997 [TJOI2015]组合数学(单调DP)

时间:2017-05-12 01:34:05      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:i++   lin   href   amp   cst   组合数   bsp   std   scan   

 

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3997

 

【题目大意】

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

 

【题解】

  最小链覆盖=最长反链,反链的意思就是该集合中的点相互之间不互达,
  在该题中,最长反链可以用dp得出。

 

【代码】

#include <cstdio>
#include <algorithm>
using namespace std;
const int N=1010;
int T,n,m,a[N][N];
long long dp[N][N];
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);
        for(int i=1;i<=n;i++){
            for(int j=m;j;j--)dp[i][j]=max(dp[i-1][j+1]+a[i][j],max(dp[i-1][j],dp[i][j+1]));
        }printf("%lld\n",dp[n][1]);
    }return 0;
}

BZOJ 3997 [TJOI2015]组合数学(单调DP)

标签:i++   lin   href   amp   cst   组合数   bsp   std   scan   

原文地址:http://www.cnblogs.com/forever97/p/bzoj3997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!