NOIP2000方格取数(洛谷,动态规划递推)
先上题目:
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方格取数(洛谷,动态规划递推)的更多相关文章
- 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏
P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
- P1004 方格取数-洛谷luogu-dp动态规划
题目描述 设有N \times NN×N的方格图(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A 0 0 0 0 0 0 0 0 ...
- 方格取数洛谷p1004
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- AC日记——方格取数 洛谷 P1004
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)
题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ...
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...
- P1048 采药(洛谷,动态规划递推,01背包原题)
题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...
- NOIP2000方格取数[DP]
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
随机推荐
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] B. Finding Team Member 排序
B. Finding Team Member ...
- 关于Domain Sepcific Lang
今天在看一些关于CO的东东 里面提到,用从语言派生出来的领域语言再去编写代码会大大加速开发进程 PHP应该是个典型的领域语言(Perl之于文本处理也是这样),虽然不是从什么其他领域派生出来的,但是使用 ...
- PSAM卡之常用APDU指令错误码【转】
本文转载自:http://blog.csdn.net/lvxiangan/article/details/53933714 PSAM卡的内容交互,是通过APDU指令完成的,常见的APDU报文格式如下: ...
- 红米note怎么打开USB调试模式
红米note到货后,打开USB调试模式是一些新手很棘手的问题,所以要手机助手成功识别红米note,你必须打开红米note的USB调试模式.在安卓4.2版本中,系统的USB调试模式不是非常简单地被打开的 ...
- 【POJ 2983】 Is the information reliable?
[题目链接] 点击打开链接 [算法] 差分约束系统,SPFA判负环 [代码] #include <algorithm> #include <bitset> #include & ...
- 【转】整套完整安全的API接口解决方案
原文地址:http://www.cnblogs.com/hubro/p/6248353.html 在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API ...
- iOS开发——多线程
很多朋友都说iOS开发中,最难理解和学习的就是多线程,很多的原理实现都是通过log看到,也比较抽象,本人也是在多线程方面投入过很多脑细胞..无论这方面的知识掌握和应用起来是否轻松,牢固的基本功.正确的 ...
- java笔记线程方式1获取对象名称
* 如何获取线程对象的名称呢? * public final String getName():获取线程的名称. * 如何设置线程对象的名称呢? * public final void setName ...
- INT类型知多少
前言: 整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用. 1.整型分 ...
- 微信小程序资源
1.http://blog.csdn.net/wyx100/article/details/52667518 2.http://mp.weixin.qq.com/s?__biz=MzIyMDM2Mjg ...