洛谷 - P1004 - 方格取数 - 简单dp
https://www.luogu.org/problemnew/show/P1004
这道题分类到简单dp但是感觉一点都不简单……这种做两次的dp真的不是很懂怎么写。假如是贪心做两次,感觉又不能证明这是最优的。
直接看题解,题解要设置4个维度,两个人同时走……但是怎么避免同一个物品被两个人拿呢?
设置dp[i][j][k][l]表示第1个人走到ij,第2个人走到kl能实现的最大的取法,再加一维[p]表示现在已经取了00,01,02,10,11,12,20,21,22个物品,然后dp的内容是一个vector!这样就完美地表达了所有信息了!这样同一个物品只会让一个状态转移到另一个状态,保证不会让这个物品同时被取到!空间复杂度?我为什么要管空间复杂度?这个dp时间复杂度都是和空间复杂度同阶的……省那一点干嘛呢……
好了看了别人的状态设置,找到一个思路,先自己写试试看……
写个鬼哦我去,读错题了,不是只能拿两个物品……我又该睡觉了……
注意两个人是同时走的!假设不是两个人同时走的,那会怎么样呢?那样不仅复杂度上升了n²,而且不能判断当前格子是不是被另一个人的路取过了。
#include<bits/stdc++.h>
using namespace std;
#define ll long long int dp[][][][];
int a[][]; int main(){
int n;
scanf("%d",&n);
int x,y,v;
while(){
scanf("%d%d%d",&x,&y,&v);
if(x==&&y==&&v==)
break;
a[x][y]=v;
} for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
for(int k=;k<=n;k++){
for(int l=;l<=n;l++){
dp[i][j][k][l]=max(max(dp[i-][j][k-][l],dp[i-][j][k][l-]),max(dp[i][j-][k-][l],dp[i][j-][k][l-]));
dp[i][j][k][l]+=a[i][j];
if(i==k&&j==l)
;
else
dp[i][j][k][l]+=a[k][l];
}
}
}
}
printf("%d\n",dp[n][n][n][n]);
}
别人的题解说后面还有传纸条和回文的路径,也是这种两边一起做的dp。
洛谷 - P1004 - 方格取数 - 简单dp的更多相关文章
- 洛谷P1004 方格取数-四维DP
题目描述 设有 N \times NN×N 的方格图 (N \le 9)(N≤9) ,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00 .如下图所示(见样例): A 0 0 0 0 0 ...
- 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏
P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...
- 洛谷 P1004 方格取数 题解
P1004 方格取数 题目描述 设有 \(N \times N\) 的方格图 \((N \le 9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字\(0\).如下图所示(见样例): ...
- 洛谷 P1004 方格取数 【多进程dp】
题目链接:https://www.luogu.org/problemnew/show/P1004 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 ...
- 洛谷P1004 方格取数
网络流大法吼 不想用DP的我选择了用网络流-- 建模方法: 从源点向(1,1)连一条容量为2(走两次),费用为0的边 从(n,n)向汇点连一条容量为2,费用为0的边 每个方格向右边和下边的方格连一条容 ...
- 洛谷 P1004 方格取数 【多线程DP/四维DP/】
题目描述(https://www.luogu.org/problemnew/show/1004) 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...
- 洛谷 P1004 方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- 【动态规划】洛谷P1004方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- 四维动规 洛谷P1004方格取数
分析:这个题因为数据量非常小,可以直接用四维的DP数组 dp[i][j][k][l]表示第一个人走到位置(i,j),第二个人走到位置[k][l]时所取的数的最大和 状态转移方程可以轻松得出为:dp[i ...
随机推荐
- vue - 前置工作 - 安装vsCode以及插件
开发环境:Win7 x64 开发工具:vsCOde 开发工具vsCode插件配置:Vetur.ivue.Vue 2 Snippets Vetur:强力推荐的一款插件,为什么呢? 格式化代码.高亮.代码 ...
- BZOJ 3732 Network 最小瓶颈路
题目大意:给出一个无向边,非常多询问,问x,y两地之间的最长路最短是多少. 思路:乍一看好像是二分啊. 的确这个题二分能够做.可是时间会慢非常多,有的题直接就T掉(NOIP2013货车运输). 事实上 ...
- VB.net版机房收费系统——结账功能实现(调错与优化)
调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...
- 利用ms17_010漏洞实验
1.理论 在MSF里面msfconsole可以说是最流行的一个接口程序.但是msfconsole真的是一个强大的接口程序.Msfconsole提供了一个一体化的集中控制台.通过msfconsole,你 ...
- for in 与for of
最近在项目中需要用到遍历对象,用ES6 for of对象后报如下错误 TypeError: [object Object] is not iterable!,网上查询阮大神的教程发现“ES6 的有些 ...
- 用python编写的简易端口扫描器
#coding = utf-8 ''' python 3.4 通过简单的TCP端口连接来判断指定IP是否开放了指定端口. ''' import socket import optparse impor ...
- DRP——Dom4j使用
dom4j是一个Java的XMLAPI,类似于jdom.用来读写XML文件的.dom4j是一个很很优秀的JavaXMLAPI.具有性能优异.功能强大和极端易用使用的特点.Dom4j是一个易用的.开源的 ...
- DOM操作一
1.通过ID选取元素 var section = document.getElementById("section1"); 2.通过ID查找多个元素 function getEle ...
- linux命令启动服务(tomcat服务或者jar包)
启动tomcat: 1.方式一:直接启动 ./startup.sh 2.方式二:nohup ./startup.sh & 启动后,关闭当前客户端连接,重新启动一个查看是 否已经启动 启动jar ...
- 解决ubuntu没有/var/log/messages的问题
1:root身份打开 /etc/rsyslog.d/50-default.conf 2:把注释#去掉 #*.=info;*.=notice;*.=warn;\ # auth,authpriv.none ...