先上题目:

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. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] B. Finding Team Member 排序

                                                                      B. Finding Team Member             ...

  2. 关于Domain Sepcific Lang

    今天在看一些关于CO的东东 里面提到,用从语言派生出来的领域语言再去编写代码会大大加速开发进程 PHP应该是个典型的领域语言(Perl之于文本处理也是这样),虽然不是从什么其他领域派生出来的,但是使用 ...

  3. PSAM卡之常用APDU指令错误码【转】

    本文转载自:http://blog.csdn.net/lvxiangan/article/details/53933714 PSAM卡的内容交互,是通过APDU指令完成的,常见的APDU报文格式如下: ...

  4. 红米note怎么打开USB调试模式

    红米note到货后,打开USB调试模式是一些新手很棘手的问题,所以要手机助手成功识别红米note,你必须打开红米note的USB调试模式.在安卓4.2版本中,系统的USB调试模式不是非常简单地被打开的 ...

  5. 【POJ 2983】 Is the information reliable?

    [题目链接] 点击打开链接 [算法] 差分约束系统,SPFA判负环 [代码] #include <algorithm> #include <bitset> #include & ...

  6. 【转】整套完整安全的API接口解决方案

    原文地址:http://www.cnblogs.com/hubro/p/6248353.html 在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API ...

  7. iOS开发——多线程

    很多朋友都说iOS开发中,最难理解和学习的就是多线程,很多的原理实现都是通过log看到,也比较抽象,本人也是在多线程方面投入过很多脑细胞..无论这方面的知识掌握和应用起来是否轻松,牢固的基本功.正确的 ...

  8. java笔记线程方式1获取对象名称

    * 如何获取线程对象的名称呢? * public final String getName():获取线程的名称. * 如何设置线程对象的名称呢? * public final void setName ...

  9. INT类型知多少

    前言: 整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用. 1.整型分 ...

  10. 微信小程序资源

    1.http://blog.csdn.net/wyx100/article/details/52667518 2.http://mp.weixin.qq.com/s?__biz=MzIyMDM2Mjg ...