3997: [TJOI2015]组合数学

题意:\(n*m:\ n \le 1000\)网格图,每个格子有权值。每次从左上角出发,只能向下或右走。经过一个格子权值-1.至少从左上角出发几次所有权值为0。


容易发现偏序关系

\[x_1 \le x_2, y_1 \le y_2
\]

最少链数=最长反链大小

但是本题每个元素有权值

容易发现,最少链数=最大权值反链的权值

然后我沙茶的写了一个\(O(n^4)\)的DP就T掉了

怒写二维树状数组,A了

其他人怎么辣么快啊,然后发现直接

f[i][j] = max(f[i+1][j-1] + a[i][j], max(f[i][j-1], f[i+1][j]))

这样DP就行了...

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1005;
inline int read() {
char c=getchar(); int x=0, f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
} int n, m, a[N][N];
namespace bit {
ll c[N][N];
inline void add(int x, int y, ll d) { //printf("-----------d %lld\n",d);
for(int i=x; i; i-=i&-i)
for(int j=y; j<=m; j+=j&-j) c[i][j] = max(c[i][j], d);
}
inline ll cal(int x, int y) {
if(x<1 || x>n || y<1 || y>m) return 0;
ll ans = 0;
for(int i=x; i<=n; i+=i&-i)
for(int j=y; j; j-=j&-j) ans = max(ans, c[i][j]);// printf("c %d %d %lld ans %lld\n", i, j, c[i][j], max(ans, c[i][j]));
return ans;
}
}
int main() {
//freopen("in", "r", stdin);
int T=read();
while(T--) {
n=read(); m=read();
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) a[i][j] = read(), bit::c[i][j] = 0;
ll ans=0;
for(int i=n; i>=1; i--)
for(int j=1; j<=m; j++) {
ll now = bit::cal(i+1, j-1) + a[i][j];
bit::add(i, j, now);
ans = max(ans, now);
}
printf("%lld\n", ans);
}
}

BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]的更多相关文章

  1. bzoj 3997 [TJOI2015]组合数学(DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3997 [题意] 给定一个nm的长方形,每次只能使经过格子权值减1,每次只能向右向下,问 ...

  2. 【BZOJ 3997】 3997: [TJOI2015]组合数学 (DP| 最小链覆盖=最大点独立集)

    3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 919  Solved: 664 Description 给出 ...

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3997 [题目大意] 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右 ...

  4. BZOJ 3997 TJOI2015 组合数学

    分析一下样例就可以知道,求的实际上是从左下角到右上角的最长路 因为对于任意不在这个最长路的上的点,都可以通过经过最长路上的点的路径将这个点的价值减光 (可以用反证法证明) 之后就是一个非常NOIP的D ...

  5. 3997: [TJOI2015]组合数学

    3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 247  Solved: 174[Submit][Status ...

  6. 组合数学 - BZOJ 3997 - TJOI2015

    TJOI2015 Problem's Link ---------------------------------------------------------------------------- ...

  7. 【BZOJ】3997: [TJOI2015]组合数学

    题意 \(N \times M\)的网格,一开始在\((1, 1)\)每次可以向下和向右走,每经过一个有数字的点最多能将数字减1,最终走到\((N, M)\).问至少要走多少次才能将数字全部变为\(0 ...

  8. BZOJ3997: [TJOI2015]组合数学(网络流)

    3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 405  Solved: 284[Submit][Status ...

  9. 【BZOJ3997】[TJOI2015]组合数学(动态规划)

    [BZOJ3997][TJOI2015]组合数学(动态规划) 题面 BZOJ 洛谷 题解 相当妙的一道题目.不看题解我只会暴力网络流 先考虑要求的是一个什么东西,我们把每个点按照\(a[i][j]\) ...

随机推荐

  1. HDU 1241 DFS

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  2. Ubuntu搭建Gitlab服务器

    想到Gitlab就必定会想到SVN,因为两者都是代码管理系统,作为开发人员来说,用习惯了SVN的图形化界面和SVN代码更新和提交的方式, 可能就会觉得使用git会比较麻烦,其实不然git使用起来非常方 ...

  3. 安装myeclipse后,打开时弹出:“该站点安全证书的吊销证书不可用”,怎样解决?

    1.当弹出"该站点安全证书的吊销信息不可用.是否继续?"的对话框时,点击"查看证书",切换到"详细信息"TAB页,找到其"CRL分 ...

  4. SpringMVC框架学习笔记(4)——结果跳转方式

    1.设置ModelAndView对象.根据View和视图解析器跳转到指定页面(视图解析器前缀+viewname+视图解析器后缀) @Override public ModelAndView handl ...

  5. bean的作用域 :singleton和prototype

  6. Django App(四) Submit a form

    经过前面的努力,到这里我们已经基本完成了,从服务器到浏览器的数据下发,还没有解决从浏览器到服务器的数据上传,这一节将创建一个Form获取从浏览器提交的数据 1.新建Form 接着前面建的项目,网上调查 ...

  7. oracle存储过程的创建和使用

    创建存储过程: 格式:create or replace procedure procedure_name(参数 参数类型) Is/as 变量1 变量1的类型: begin ----------业务逻 ...

  8. NSUserDefaults standardUserDefaults使用注意事项

    NSUserDefaults可以存储NSString,NSNumber, NSDate, NSArray, NSDictionary,自定义类可以通过NSData的方式进行存储,当然要实现NSCodi ...

  9. block一点也不神秘————如何利用block进行回调

    我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数时候回调是比通知方便的,所以何乐而不为呢?如果你不知道回调使用的场景,我们来假设一下: 1.我现在玩手机 2.突然手机没有电了 3.我 ...

  10. ios VS android

    本来是学习IOS的,但是最近接到的是有关于安卓的项目,害怕弄混,所以在这个技术博客里写一下对比. IOS                                                 ...