柱爷的矩阵

Time Limit: 125/125MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit  Status

柱爷能干这么多大事,与他喜爱玩弄矩阵是分不开的。

有一天柱爷创造了一个NN行MM列的的矩阵A,因为一个个造数据太麻烦,所以柱爷只搞了第一列的数据Ai,1,1≤i≤NAi,1,1≤i≤N,其他数据由Ai,j=max(Ai,j−1−Bi,0),1≤i≤N,2≤j≤MAi,j=max(Ai,j−1−Bi,0),1≤i≤N,2≤j≤M 生成。

那么问题来了,柱爷想每行每列取不超过1个数,请问最大的和是多少。

Input

输入包括3行

第一行 2个数N,MN,M

第二行 N个数Ai,1Ai,1

第三行 N个数BiBi

数据保证:

  • 1≤M≤N≤10001≤M≤N≤1000

  • 1≤Ai,1≤1061≤Ai,1≤106

  • 1≤Bi≤Ai,11≤Bi≤Ai,1

Output

输出一个数,即答案

Sample input and output

Sample Input Sample Output
2 1
6 8
1 5 
8
4 3
5 9 10 3
1 6 7 3 
16

Hint

对于样例2

矩阵A为

5 4 3

3 0

10 3 0

3 0 0

10+3+3=16

Source

2016 UESTC Training for Dynamic Programming
题解:涉及到一个二维矩阵内数字的选择问题,我们第一个想到的就是dp,没错,这就是一个二维dp,但是也是有技巧的,首先通过观察矩阵的生成式,我们可以看到每一行是一个等差序列,根据选数字的规则,对于每一行我们可以选一个或者不选,每一列可以选一个或者不选,这样一来很容易想到,我们应该优先选下降的快的,这是可证的。因此我们先对第一列安装想下降顺序对其进行排列。
因此我们可以得到一个dp方程,设dp[i][j]为选了第i行第j列之后得到的最优解,mx[i][j]为考虑到第i行第j列(即选或不选)的最优解
得到状态转移方程
dp[i][j]=mx[i-1][j-1]+max(0,(i-1)*b[j]);
mx[i][j]=max(dp[i][j],dp[i][j-1])
代码如下
#include <iostream>
#include <bits/stdc++.h>
using namespace std;int dp[1005][1005];
int mx[1005][1005];
struct node
{int a;int b;
}nod[1005];bool cmp(node a,node b)
{return a.b>b.b;
}int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++)scanf("%d",&nod[i].a);for(int i=1;i<=n;i++)scanf("%d",&nod[i].b);sort(nod+1,nod+1+n,cmp);for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){dp[i][j]=mx[i-1][j-1]+max(0,nod[j].a-(i-1)*nod[j].b);mx[i][j]=max(dp[i][j],mx[i][j-1]);}}int ans=0;for(int i=1;i<=m;i++)ans=max(ans,mx[i][n]);cout<<ans<<endl;//cout << "Hello world!" << endl;return 0;
}

CDOJ 1347柱爷的矩阵(二维dp)相关推荐

  1. CDOJ 1321柱爷的恋爱 (区间dp)

    柱爷的恋爱 Time Limit: 1000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  St ...

  2. P1719 最大加权矩形(二维dp)

    P1719 最大加权矩形(二维dp) 原题戳这里 题目描述 为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑 ...

  3. 2020 年百度之星·程序设计大赛 - 初赛一 Dec 二维DP,预处理

    problem Dec Accepts: 1284 Submissions: 4572 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...

  4. Efficient Exchange DP 二维DP

    YouhaverecentlyacquiredanewjobattheBankforAcquiring Peculiar Currencies. Here people can make paymen ...

  5. P2380 狗哥采矿 (二维dp)

    原题链接:狗哥采矿 - 洛谷 思路:我一开始想的是,一个点往左走还是往上走与 它上面和左边的点走的方向有关系,但是感觉复杂交错.....然后看到了大佬的二维dp,其实Aij往左走,就让它左边的这一条都 ...

  6. HDU-1493 QQpet exploratory park(概率+二维dp)

    第一次做dp 题目 扔骰子,给出扔出每个点的概率,求出到达特定点的概率是多少..这里所有特定点的和并不是100%,每个特定点的计算是将每一次(共十次)经过它的概率都加起来求和.得到100%的情况是将每 ...

  7. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  8. BZOJ 1567: [JSOI2008]Blue Mary的战役地图 矩阵二维hash

    1567: [JSOI2008]Blue Mary的战役地图 Description Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提 ...

  9. C语言用数组编程矩阵,二维数组—矩阵求和(C语言)

    昨天上机了,之前上机都觉得题目挺简单的,但昨天的题明显比以前难了好吗!字符串二维数组感觉也没教什么呀..所以我也做了蛮久,现依次把这几道题放在这里留作纪念. 题目1:请写一个程序,对于一个m行m列(2 ...

最新文章

  1. html流式布局怎么用,css 流式布局什么意思?
  2. IntelliJ IDEA安装主题详细步骤
  3. jumpserver 堡垒机环境搭建(图文详解)
  4. 输入缓冲区对程序的影响及解决方法(多种语言都会出现)
  5. 拷贝data/data/包名/files文件记下所有文件及文件夹到本地sdcard根目录teddyData_files文件夹下...
  6. 设计模式(十四):适配器模式
  7. 蓝桥杯2018年第九届C/C++省赛B组第七题-螺旋折线
  8. CC2530无线点灯
  9. Flash Bootloader
  10. 信道编码与信源编码基本
  11. Max Script|控制摄像机
  12. 计算机硬盘容量计算公式
  13. hadoop 爬虫_这些不用编程的爬虫工具,你一定要知道
  14. 目录 如何成为一个合格的段子手
  15. oop-klass_在PHP和MySQL中处理时间和日期-OOP版本
  16. 批量给word添加水印,word魔方顺利完成
  17. 好看的黑色响应式滚动式动态背景个人导航HTML源码
  18. BZOJ 3426 CodeChef/CHANGE
  19. android只编译release版本
  20. 如何利用计算机班级成绩分析,北京自考计算机应用基础课成绩分析报告

热门文章

  1. 导数与偏导数的推导过程
  2. 数字化转型六图法:战略地图
  3. 苹果无线耳机连接不上_能和AirPods比比看?安卓将改进蓝牙管理,适应真无线耳机...
  4. POJ 3384 Feng Shui
  5. 英语中的分数 带分数 小数怎么读
  6. R软件--GEO数据分析教程:差异性分析、富集分析(GO\KEGG\DO)
  7. 做一个植物大战僵尸有多难?python教你几步搞定
  8. IDL的参数传递(五)
  9. 【工作日记】这一年来完全用Linux工作的感受
  10. 什么是网站备案?如何查询网站是否备案?