博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matrix 矩阵(多维DP)
阅读量:4610 次
发布时间:2019-06-09

本文共 1286 字,大约阅读时间需要 4 分钟。

题面

Aun8QU.png

\(solution:\)

这一题其实就是一个非常明显的三维背包问题(但博主太弱了就10分QAQ)

\(F[i][j][k]:\)表示走到\((i,j)\)这个位置并且背包容量为 \(k\) 时的最大价值。因为转移时只能向下或向右转移,所以我们可以按行\(DP\)(从上到下,从左到右遍历),进行滚动数组,从而把第一位省去。

\(code:\)

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define db double#define inf 0x7fffffff#define rg register intusing namespace std;int n,m,t,ans;int a[405][405];int b[405][405];int f[405][405];inline int qr(){ char ch; while((ch=getchar())<'0'||ch>'9'); int res=ch^48; while((ch=getchar())>='0'&&ch<='9') res=res*10+(ch^48); return res;}int main(){ //freopen("matrix.in","r",stdin); //freopen("matrix.out","w",stdout); n=qr(),m=qr(),t=qr(); for(rg i=1;i<=n;++i) for(rg j=1;j<=m;++j) a[i][j]=qr(); for(rg i=1;i<=n;++i) for(rg j=1;j<=m;++j) b[i][j]=qr(); for(rg i=1;i<=n;++i){ for(rg j=1;j<=m;++j){ for(rg k=0;k<=t;++k){ f[j][k]=max(f[j][k],f[j-1][k]); if(k+a[i][j]>t)continue; f[j][k]=max(f[j][k],f[j][k+a[i][j]]+b[i][j]); f[j][k]=max(f[j][k],f[j-1][k+a[i][j]]+b[i][j]); } } } for(rg j=1;j<=m;++j) for(rg i=0;i<=t;++i) ans=max(ans,f[j][i]); printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/812-xiao-wen/p/10328324.html

你可能感兴趣的文章
HDU5950【矩阵快速幂】
查看>>
在线C++编译器
查看>>
C#中各种serialization的比较
查看>>
P2617 Dynamic Rankings
查看>>
工作学习常识1
查看>>
Eclipse插件项目中读取文件
查看>>
jquery定义链接跳转的高亮显示
查看>>
CheckListBox怎样得到多选值?
查看>>
三道题(关于虚表指针位置/合成64位ID/利用栈实现四则运算)
查看>>
Vijos P1243 生产产品 (单调队列优化DP)
查看>>
mysql 数据表操作 目录
查看>>
iOS常用第三方库 -转
查看>>
Android布局学习
查看>>
jQuery中事件绑定与解绑
查看>>
js原生Ajax的封装与使用
查看>>
周总结6
查看>>
PostgreSQL 务实应用(二/5)插入冲突
查看>>
一种公众号回复关键词机制
查看>>
java多线程入门学习(一)
查看>>
基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!
查看>>