题面

给你一个n*m的矩阵,要求每一行选择一个数,并且第i行选择的位置a[i]一定要大于第i-1行选择的位置a[i-1],求选取的数的总和为多少,输出一组字典序最小的a[1]到a[n]。1<=n<=m<=100

链接:http://contest-hunter.org/contest/0x5E

思路

首先dp的状态是显而易见的

\(f[i][j]=\max_{i-1<=k<j}f[i-1][k]+a[i][j]\)

表示选到第i行第j个数且一定会选这个数时的和的最大值。复杂度是\(O(n^3)\),虽然可以过,但其实还可以优化可以发现k的范围是随j不断变大的,所以每一次循环i时设一个变量maxk,然后j每改变一次,就用f[i-1][j-1]更新一次maxk就可以了。

实际上这种优化相当于一个表示选到第i行第j个数且不一定会选这个数时的和的最大值的状态,只需要改一下转移方程就好了

\(f[i][j]=\max\{f[i][j-1],f[i-1][j-1]+a[i][j]\}​\)

至于到底怎么设好,因人而异了,只是有时候设第一种类型设多了,就不记得设第二种了@_@,还是都练练为好。

代码

#include <cstring>
using namespace std;
const int N=110;
typedef long long ll;
int p[N][N],a[N][N];
ll f[N][N];
void dfs(int i,int j)
{if(!i) return;dfs(i-1,p[i][j]);printf("%d ",j);
}
int main()
{int n,m,jj;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);memset(f,0xc0,sizeof(f));ll ans=f[0][0];f[0][0]=0;for(int i=1;i<=n;i++){int maxi=f[i-1][i-1],ii=i-1;for(int j=i;j<=m;j++){f[i][j]=maxi+a[i][j];p[i][j]=ii;if(maxi<f[i-1][j]) maxi=f[i-1][j],ii=j;}}for(int i=n;i<=m;i++)if(ans<f[n][i]) ans=f[n][i],jj=i;printf("%lld\n",ans);dfs(n,jj);putchar('\n');return 0;
}

转载于:https://www.cnblogs.com/flashlizard/p/10995228.html

【线性dp】【决策优化】CH5E02相关推荐

  1. POJ3666 线性dp+维度优化

    POJ3666 线性dp+维度优化 题面 POJ3666 题面 思路 首先是重要的归纳法寻求思路的思想,在满足S最小化的前提下,假设存在一种构造前k位序列B的方案,即已经构造B1B2⋯BkB_1B_2 ...

  2. 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)

    题干: 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.2 ...

  3. 寒假算法学习 OI生涯 - 悄无声息(模拟+线性DP优化) OI生涯 - 德国心脏病 (模拟)

    OI生涯 - 悄无声息 题目描述 「李」走路是没有动静的,如果你在干「李」不让你干的事情,他会神不知鬼不觉的走到你的身后,然后把你奶一顿! 因为你知道「李」走路没有动静,所以为了提防,可以认为「李」有 ...

  4. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  5. CodeForces - 456C Boredom(线性dp)

    题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...

  6. POJ - 1050 To the Max(最大连续子段和,线性dp)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...

  7. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

  8. 动态规划之线性DP题集

    动态规划之线性DP 文章目录 动态规划之线性DP (一)LIS问题 最长上升子序列 (朴素动规) (二分+贪心+动规) 最大子序和 (动规) (贪心) 最长连续递增序列 (动规) (双指针) 俄罗斯套 ...

  9. 商业决策优化求解器软件,继芯片与操作系统之后的国之重器

    日前,来自中国自主研发的两款商业决策优化求解器软件成功登顶国际权威数学决策软件测评排行榜,杉数科技拔得头筹,阿里紧随其后,引发了国人对于决策优化求解器的关注.此前,由于国际竞争,芯片和操作系统已经成为 ...

  10. MegEngine亚线性显存优化

    MegEngine亚线性显存优化 MegEngine经过工程扩展和优化,发展出一套行之有效的加强版亚线性显存优化技术,既可在计算存储资源受限的条件下,轻松训练更深的模型,又可使用更大batch siz ...

最新文章

  1. 至强® 平台配备先进遥测技术让您的数据中心更智能
  2. 二叉查找树BST----java实现
  3. 电脑w ndows无法自动修复,windows 10自动修复无法修复你的电脑
  4. jupyter notebook 设置默认目录
  5. 基于matlab的prony方法实现,基于MATLAB的Prony方法实现
  6. Fastjson 1.2.22-24 反序列化漏洞分析
  7. pandas apply lambda_一分钟一个Pandas小技巧(二)
  8. 人生必看的100部好电影
  9. 深入了解 Squid 代理服务器及应用
  10. rap技术原理_人们对Rap(说唱)理解的误区,你知道多少?
  11. 点击图片实现图片居中放大的功能
  12. 展示 用户画像_到底如何做用户画像?
  13. 基于龙格-库塔法Runge-Kutta的常微分方程的求解matlab仿真
  14. 服务器千兆网卡加无线ap,(再次更新对比图)发一个自己DIY的八口千兆软路由 配合思科工业AP 各位大人怎么看?...
  15. java asm jndi_JNDI 注入利用工具
  16. 职场上不得不知的六大潜规则
  17. 游戏收入模型_什么是收入模型
  18. 财务建模完整指南第一讲——第五届CVA估值精英计划
  19. Minimap2简介
  20. mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...

热门文章

  1. 数据结构算法入门--链表
  2. android imageview 图片切换动画,在Android中以动画方式将ImageView移动到不同的位置...
  3. 线程八大核心+java并发核心知识体系精讲_Java从业者如果不懂这些,面试80%都会挂在这些核心知识上面...
  4. Unity C#笔记 协程详解(转)
  5. VSCode.exe扩展主机意外终止。请重新加载窗口以恢复。
  6. PAT——1027. 打印沙漏
  7. 【转】java提高篇(二)-----理解java的三大特性之继承
  8. JavaScript 回调函数中的 return false 问题
  9. 每次新建Android项目都报样式找不到的错误?
  10. lucene,lucene.net学习教程