nyist 61 传纸条 nyist 712 探 寻 宝 藏(双线程dp问题)
http://acm.nyist.net/JudgeOnline/problem.php?pid=61
http://acm.nyist.net/JudgeOnline/problem.php?pid=712
这是双进程DP问题,首先,假设出发点为A 终点为B 那么,根据题目给出的条件,可以推出A->B的动态转移方程为 dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + a[i][j]; 由于,同理可得B的情况,那么,题目的意思是A->B 然后 B -> A我们可以假设同时从A点出发,得到两条不同路径,这个是一样的效果。所以,我们可以得到一个动态转移方程
dp[i][j][p][q] = max(dp[i-1][j][p-1][q],dp[i-1][j][p][q],dp[i][j-1][p-1][q],dp[i][j-1][p][q-1]) 因为 每次只能移动一步,即 i+1 或j+1 那么 i+j是移动的步数 因为从A点开始移动的,经过相同的步数,肯定能得到i+j = p+q
还有一点要注意一下,这题与NYOJ 61是同类问题,但是,有一点细节要注意,最后终点的值也要算上,上面的动态方程得到的值不包含两个A 和 B的值,因为 A是起点,所以,他的值一般是0,所以,得到最后的结果应该是 int sum = max(dp[m-1][n][m-1][n],dp[m-1][n][m][n-1],dp[m][n-1][m-1][n],dp[m][n-1][m][n-1]) + a[m][n];
nyist 61代码
#include <iostream>
#include <cstring>
using namespace std;
int a[55][55],dp[55][55][55][55];
int main(int argc, char *argv[])
{
int t,n,m,i,j,p,q,ans;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
for(p=i+1;p<=n;p++)
{
q=i+j-p;
if(q<=0) continue;
dp[i][j][p][q] = max(max(dp[i-1][j][p-1][q],dp[i][j-1][p][q-1]),
max(dp[i-1][j][p][q-1],dp[i][j-1][p-1][q])) + a[i][j] + a[p][q];
}
ans=max(max(dp[n-1][m][n-1][m],dp[n-1][m][n][m-1]),
max(dp[n][m-1][n-1][m],dp[n][m-1][n][m-1]));
cout<<ans<<endl;
}
return 0;
}
nyist 712代码:
#include <iostream>
#include <cstring>
using namespace std;
int a[55][55],dp[55][55][55][55];
int main(int argc, char *argv[])
{
int t,n,m,i,j,p,q,ans;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
for(p=i+1;p<=n;p++)
{
q=i+j-p;
if(q<=0) continue;
dp[i][j][p][q] = max(max(dp[i-1][j][p-1][q],dp[i][j-1][p][q-1]),
max(dp[i-1][j][p][q-1],dp[i][j-1][p-1][q])) + a[i][j] + a[p][q];
}
ans=max(max(dp[n-1][m][n-1][m],dp[n-1][m][n][m-1]),
max(dp[n][m-1][n-1][m],dp[n][m-1][n][m-1]));
cout<<ans+a[n][m]<<endl;
}
return 0;
}
nyist 61 传纸条 nyist 712 探 寻 宝 藏(双线程dp问题)的更多相关文章
- nyoj 712 探 寻 宝 藏--最小费用最大流
问题 D: 探 寻 宝 藏 时间限制: 1 Sec 内存限制: 128 MB 题目描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有 ...
- 探 寻 宝 藏--- DP
题目描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有宝物,最珍贵的宝物就藏在右下角,迷宫的进出口在左上角.当然,迷宫中的通路不是平坦 ...
- nyoj 61 传纸条
点击打开链接 传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做 ...
- 南阳OJ 61 传纸条(一)
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- nyoj 61——传纸条(一)——————【双线dp】
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- nyoj 题目61 传纸条
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- 传纸条(一)(双线程dp)
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- NYOJ 61传纸条(一) 双线程DP问题
http://www.cnblogs.com/HpuAcmer/archive/2012/05/06/2486591.html 题目链接:http://acm.nyist.net/JudgeOnlin ...
- NYOJ 61 传纸条(一)
双线DP #include<iostream> #include<algorithm> #include<ctype.h> #include<string&g ...
随机推荐
- hazelcast的坑爹事
转载自 http://blog.csdn.net/hengyunabc/article/details/18514563 简介 开源中国的简介: Hazelcast是一个高度可扩展的数据分发和集群平台 ...
- git研究2
git也有发布版本时期的tag,不过这个tag,主要是作为一个标记而存在的,或者说在某个commit上面再打一个标记,表明版本是多少.这个和SVN上面的不太一样,SVN感觉有多份保存,似乎没有git方 ...
- js如何打印object对象
js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一 ...
- 手动修复OneDrive的DNS污染屏蔽的方法
随着云计算的发展和微软云战略的持续推进,使用网盘进行文档存储.协同编辑与共享已成为文档操作的新流程.而Office.Office 365和OneDrive等微软产品是Windows用户的首选.但由于国 ...
- html-----008
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Excel对话框大全
Excel对话框大全 序号 名称 描述 1 Application.Dialogs(1).Show 是调用打开对话框 2 Application.Dialogs(5或145).Show 是调用另存为 ...
- Eclipse 和 Intellij idea 快捷键的区别
描述 Eclipse IntelliJ 代码补全 Ctrl+space ctrl+space 打开类或者接口 (两个IDE都支持使用“驼峰字符”前缀的方式来过滤查找列表,进而轻松完成搜索:比如:可以使 ...
- hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:
hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception: 所报异常: 严重 ...
- Library string type(2)——关于String的操作
关于string的定义,请参阅博文http://blog.csdn.net/larry233/article/details/51483827 string的操作 s.empty() //Return ...
- STL unique使用问题
string strs[] = {"one","one","two","three","three" ...