先上题目:

P1004 方格取数

下面上ac代码:

///如果先走第一个再走第二个不可控因素太多
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll f[][][][];
ll a[][];
int main()
{
ios::sync_with_stdio(false);
ll n,xx,yy,zz;
cin>>n;
while(scanf("%lld %lld %lld",&xx,&yy,&zz)==&&!(xx==&&yy==&&zz==))
a[xx][yy]=zz;//导入基本数据
//我们需要f[n][n][n][n]作为答案,它表示走完两次的总数
// f[1][1][1][1]=a[1][1];//这里不用赋初值
for(ll i=;i<=n;i++)
for(ll j=;j<=n;j++)
for(ll x=;x<=n;x++)
for(ll y=;y<=n;y++)
{
f[i][j][x][y]=a[i][j]+a[x][y]+max(max(max(f[i-][j][x-][y],f[i-][j][x][y-]),f[i][j-][x-][y]),f[i][j-][x][y-]);
// f[i][j][x][y]=max(f[i][j][x][y],f[i-1][j][x-1][y]+a[i][j]+a[x][y]);
// f[i][j][x][y]=max(f[i][j][x][y],f[i-1][j][x][y-1]+a[i][j]+a[x][y]);
// f[i][j][x][y]=max(f[i][j][x][y],f[i][j-1][x-1][y]+a[i][j]+a[x][y]);
// f[i][j][x][y]=max(f[i][j][x][y],f[i][j-1][x][y-1]+a[i][j]+a[x][y]);
if(i==x&&j==y)
f[i][j][x][y]-=a[i][j];
}
cout<<f[n][n][n][n]<<endl;
}

点击加号展开代码

然后讲思路:

1.如果先走第一个,第一个走完了再走第二个会有很多不可控因素(我就摔在这个坑上)

2.这题其实可以看作两个人同时走

每一回合有四种可能:

@1,两个同时向右走

@2,两个同时向下走

@3,第一个向右走,第二个向下走

@4,第一个向下走,第二个向右走

所以需要四个连环的for循环

用i,j表示第一个的坐标,x,y表示第二个的坐标

如果他们同时相遇,就相当于把一个格子的数字拿了两次,再减掉这一次就好了

也就是:

if(i==x&&j==y)
f[i][j][x][y]-=a[i][j];

这里的减就是数字拿多了,要扣的意思

然后递推式有两种写法:

@1:

 f[i][j][x][y]=max(f[i][j][x][y],f[i-][j][x-][y]+a[i][j]+a[x][y]);
f[i][j][x][y]=max(f[i][j][x][y],f[i-][j][x][y-]+a[i][j]+a[x][y]);
f[i][j][x][y]=max(f[i][j][x][y],f[i][j-][x-][y]+a[i][j]+a[x][y]);
f[i][j][x][y]=max(f[i][j][x][y],f[i][j-][x][y-]+a[i][j]+a[x][y]);

第一种递推式的意思是考虑四种走法哪一种好,找出最大的,为每一格附上当前能有的最大数目,一直递推就是答案了

@2:

f[i][j][x][y]=a[i][j]+a[x][y]+max(max(max(f[i-][j][x-][y],f[i-][j][x][y-]),f[i][j-][x-][y]),f[i][j-][x][y-]);

第二种和第一种一个意思,写法不同而已

最后f[n][n][n][n]就是我们要的答案了

NOIP2000方格取数(洛谷,动态规划递推)的更多相关文章

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

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

  2. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  3. P1004 方格取数-洛谷luogu-dp动态规划

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

  4. 方格取数洛谷p1004

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

  5. AC日记——方格取数 洛谷 P1004

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

  6. P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)

    题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ...

  7. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

  8. P1048 采药(洛谷,动态规划递推,01背包原题)

    题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...

  9. NOIP2000方格取数[DP]

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

随机推荐

  1. mysql default null empty string concat varchar text

    text不可设置默认值 null  empty string   前者update 初始值时 我响应,但不报错

  2. 167. Two Sum II - Input array is sorted (二分ortwo-pointer)

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  3. cc1: error: bad value (armv5) for -march= switch【转】

    本文转载自:https://stackoverflow.com/questions/23871924/cc1-error-bad-value-armv5-for-march-switch Ask Qu ...

  4. YTU 2697: 血型统计

    2697: 血型统计 时间限制: 1 Sec  内存限制: 128 MB 提交: 405  解决: 164 题目描述 黑猫警长在犯罪现场发现了一些血迹,现已经委托检验机构确定了血型,需要统计各种血型的 ...

  5. [Codeforces 666B] World Tour

    [题目链接] https://codeforces.com/contest/666/problem/B [算法] 首先 , 用BFS求出任意两点的最短路径 然后 , 我们用f[i][0-2]表示从i出 ...

  6. js实现IOS上删除app时颤抖动画j函数

    欢迎提供更好的方法! <!--http://www.cnblogs.com/webzhangnan/p/3244920.html --> <html> <head> ...

  7. PyCharm创建文件时自动添加头文件

    依次找到以下路径: File->settings->Editor->File and Code Templates->Python Script  #!/usr/bin/env ...

  8. 大神给你分析HTTPS和HTTP的区别(转)

    http://www.php100.com/html/it/biancheng/2015/0209/8582.html 今天在做雅虎的时候,发现用第三方工具截取不到客户端与服务端的通讯,以前重来没碰到 ...

  9. Linux下 CentOS 7 对比6 改动详解 及 系统安装

    系统基础服务变化 操作系统 本文CentOS7 为最新版7.5 本文CentOS6 为6.9 操作 Centos6 Centos7 对比 自动补全 只支持命令.文件名 支持命令.选项.文件名 文件系统 ...

  10. 字符类型C++(ascll码表)

    ascll码: 序号 字符 序号 字符 序号 字符 序号 字符 序号 字符 序号 字符 32 空格 48 0 64 @ 80 P 96 ` 112 p 33 ! 49 1 65 A 81 Q 97 a ...