题面

通过这个题理解了一下反链的概念,更新在图论知识点里了

每个点向右和下连边可以建出一张图,这个题事实上是让我们求图的最小链覆盖。Dilworth定理告诉我们,最小链覆盖等于最长反链(反链:DAG中的一个点集,其中的点两两不可达),所以我们在横/纵一个方向上反着做dp即可(另一个方向正着,这里以从下往上,从左往右为例),每次从左,下和左下转移来。

只在从左下转移来有一个$a[i][j]$的贡献,为什么?

因为只有这时两个点互相不可达,符合反链的条件(可以看出这样的一对角线上的点都是满足这个条件的)。这也是为什么我们只在一个方向上反着做,因为两个方向都反着做那不叫求最长反链,那是建了一张反图,本质上和直接正着做是一样的=。=

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

最新文章

  1. ThinkPhp 3.2 CRUD操作
  2. 日期控件,layui
  3. LeetCode-179. Largest Number
  4. 【转】SQLServerDBA十大必备工具---让生活轻松点
  5. Install Oracle Java JDK/JRE 7u55 on Fedora 20/19, CentOS/RHEL 6.5/5.10
  6. 怎么去掉Xcode工程中的某种类型的警告
  7. How to Copy and Paste in the Ubuntu Gnome Terminal
  8. Linux gcc/g++下GDB调试及其调试脚本的使用
  9. sql优化--in和exists效率
  10. 微信小程序爬坑日记
  11. 1-1 maven 学习笔记(1-6章)
  12. mfc简单框架的分析和原理记录
  13. Nginx 模块分类
  14. TestNg 12. extentReport测试报告
  15. 【原创】Linux基础之命令行浏览器links
  16. 【转】使用Jasob混淆javascript代码
  17. 一篇自己都看不懂的CDQ分治&amp;整体二分学习笔记
  18. laravel管理员表中的模型
  19. linux下工具exfs用法
  20. RESTful源码笔记之RESTful Framework的基本组件

热门文章

  1. GO/GOLANG程序员笔记大全
  2. xml配置文件特殊符号的处理方法
  3. iOS开发学习-NSUserDefaults的介绍和用法
  4. unique STL讲解和模板
  5. 关于Keil C关键字xdata和data的问题
  6. Java网络编程一:基础知识详解
  7. 补发9.28“天天向上”团队Scrum站立会议
  8. VNC Server (Ubuntu 16.04.3 GNOME)
  9. php反射方法信息
  10. toast components