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的更多相关文章

  1. 洛谷P1004 方格取数-四维DP

    题目描述 设有 N \times NN×N 的方格图 (N \le 9)(N≤9) ,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00 .如下图所示(见样例): A 0 0 0 0 0 ...

  2. 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏

    P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...

  3. 洛谷 P1004 方格取数 题解

    P1004 方格取数 题目描述 设有 \(N \times N\) 的方格图 \((N \le 9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字\(0\).如下图所示(见样例): ...

  4. 洛谷 P1004 方格取数 【多进程dp】

    题目链接:https://www.luogu.org/problemnew/show/P1004 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 ...

  5. 洛谷P1004 方格取数

    网络流大法吼 不想用DP的我选择了用网络流-- 建模方法: 从源点向(1,1)连一条容量为2(走两次),费用为0的边 从(n,n)向汇点连一条容量为2,费用为0的边 每个方格向右边和下边的方格连一条容 ...

  6. 洛谷 P1004 方格取数 【多线程DP/四维DP/】

    题目描述(https://www.luogu.org/problemnew/show/1004) 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...

  7. 洛谷 P1004 方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  8. 【动态规划】洛谷P1004方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  9. 四维动规 洛谷P1004方格取数

    分析:这个题因为数据量非常小,可以直接用四维的DP数组 dp[i][j][k][l]表示第一个人走到位置(i,j),第二个人走到位置[k][l]时所取的数的最大和 状态转移方程可以轻松得出为:dp[i ...

随机推荐

  1. Win7 VNC远程连接Centos桌面

    一,安装Linux桌面: yum -y groupinstall Desktop yum -y groupinstall "X Window System" yum -y grou ...

  2. weex 小结

    1. import  文件时,必须引入全称,不能省略 .vue import mEcharts from '../components/Echarts.vue' 2.weex 的 cli 中没有 配置 ...

  3. js 类继承extends

    先看例子: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <titl ...

  4. POJ训练计划1035_Spell checker(串处理/暴力)

    Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18418   Accepted: 6759 De ...

  5. maven插件介绍之maven-jar-plugin

    maven-jar-plugin 插件的maven依赖为: <dependency> <groupId>org.apache.maven.plugins</groupId ...

  6. sed 常用命令

    删除以ifeq开头的行 sed -i "/^ifeq/d" file 删除空行 sed -i '/^$/d' file

  7. fatal error C1083: 无法打开预编译头文件:“Debug\opencv.pch”: No such file or directory

    stdafx.cpp右键——属性,预编译头选“创建”,其它cpp选“使用”. 调试不能优化.

  8. Mac JDK 多版本共存

    1.    安装各JDK版本,安装后通过Java -version检测是否安装好    2.    打开~/.bash_profile,没有的话创建    vim ~/.bash_profile   ...

  9. HDU3533 Escape —— BFS / A*算法 + 预处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 Escape Time Limit: 20000/10000 MS (Java/Others)  ...

  10. 没有该栏目数据可能缓存文件(data/cache/inc_catalog_base.inc)没有更新请检查是否有写入权限

    dedecms系统搬家后或在系统还原后,重新更新栏目或文件的时候,有时会出现这样的错误提示:没有该栏目数据可能缓存文件(data/cache/inc_catalog_base.inc)没有更新请检查是 ...