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 ...
随机推荐
- 如何理解scrapy Selector
1 scrapy Selector是什么 Selector对象本质上是对DOM tree的子树的抽象,这种抽象的目的是用于定位我们感兴趣的node.比如某次http response是一棵完整的DOM ...
- 【OI】指针线段树&指针
对于线段树,我们一般需要n*4的空间去存储线段树,然后有一种玄学操作是用指针来实现线段树. #include <inttypes.h> #include <algorithm> ...
- Git经常使用命令总结
Git是一款开源的分布式版本号控制系统,由Linux之父Torvalds用C语言开发. "the stupid content tracker",Git自诩为stupid,却是一个 ...
- 牛了个逼,phpstorm查询技巧
两次shift,会弹出最近常用的文件. 可以查询按照方法名,类名,文件名等进行查询. Ctrl+E可以查看最近使用的文件. Ctrl+Shift+E可以查看最近修改的文件. Ctrl+shift+N ...
- java获取本周 上周的所有日期
1 根据当前日期获得所在周的日期区间(周一和周日日期) public String getTimeInterval(Date date) { Calendar cal = Calendar.getIn ...
- luogu 1726 上白泽惠音
题目大意: 给一个有向图 求一个最大的强连通分量,输出这个强连通分量里的所有元素 若两个联通分量内点数相同 则输出字典序小的那个 思路: 直接tarjan 对每个连通分量,求一下最小点,然后判断字典序 ...
- luogu 1901 发射站
题目大意: 一个数列,它左边第一个比它高的人和右边第一个比它高的人要加上它的权值 思路: 单调栈维护一个单调递减的栈 正反各维护一遍 #include<iostream> #include ...
- [Codeforces 482A] Diverse Permutation
[题目链接] https://codeforces.com/contest/482/problem/A [算法] 首先构造一个(k + 1)个数的序列 , 满足它们的差为1-k 对于i > k ...
- codeforces AIM Tech Round 4 div 2
A:开个桶统计一下,但是不要忘记k和0比较大小 #include<bits/stdc++.h> using namespace std; ]; ]; int main() { int k; ...
- Tomcat + solr5.2.1环境搭建
1. 下载solr并解压后的目录为:E:\solr-5.2.1 , http://lucene.apache.org/solr/downloads.html 2. 将solr部署到Tomcat中 ...