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. 2017广东工业大学程序设竞赛B题占点游戏

    Description 众所周知的是,TMK特别容易迟到,终于在TMK某次又迟到了之后,Maple怒了,Maple大喊一声:"我要跟你决一死战!"然后Maple就跟TMK玩起了一个 ...

  2. [国嵌攻略][152][I2C总线介绍]

    IIC电气特性 I2C(inter intergrated circuit)总线是由philps公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线: SDA:ser ...

  3. UVA 673 Parentheses Balance (栈)

    题意描述: 给出一段只包含()和[]的字符串,判断是否合法,合法输出YES,不合法输出NO 规则: 1.该串为空,则合法 2.若A合法,B合法,则AB合法 3.若A合法,则(A)和[A]均合法 解题思 ...

  4. SAX解析原理示意

    SAX解析原理示意

  5. thinkphp开发微信公众号时,验证基本配置提示请求url超时

    原因在index.php入口文件中必须有define('APP_NAME', 'Weixin'); 服务器url:http://bxu2713700584.my3w.com/Weixin/Index/ ...

  6. 如何查看sublime安装了哪些插件

    你应该安装过package control. 那么只要这样:按ctrl+shift+p,输入package,选择list packages,就看到了. 或者直接查看Installed Packages ...

  7. Contiki 源代码目录结构

    最近要在烧写contiki的CC2650上做一些简单的实验,需要对contiki的目录结构有一个简单的了解.本文使用的是contiki 3.0版本,并且参考了百度文库上的一篇文档:https://we ...

  8. SSH的jar包下载地址

    spring http://repo.spring.io/libs-release-local/org/springframework/spring/ 条理清晰的搭建SSH环境之添加所需jar包 ht ...

  9. 序列化和Json

    实现了python与python程序之间内存的交互 常用场景: 1 把内存的数据写到磁盘 2 socket只能传字符串,二进制,通过序列化 ============================== ...

  10. DOS、Mac 和 Unix 文件格式[转]

    DOS.Mac 和 Unix 文件格式 相信很多朋友都碰到过这三种文件格式的互换问题,今日又碰到这个问题,忽然想寻根问底,于是整理了本文档. 文件格式区别   我们先看看这三个家伙有啥区别.很久以前, ...