codevs1169, 51nod1084(多线程dp)
先说下codevs1169吧,
题目链接: http://codevs.cn/problem/1169/
题意: 中文题诶~
思路: 多线程 dp
用 dp[i][j][k][l] 存储一个人在 (i, j), 一个人在 (k, l) 位置时对答案的最大贡献, 那么动态转移方程式为:
dp[i][j][k][l] = max(max(dp[i - 1][j][k - 1][l], dp[i - 1][j][k][l - 1]), max(dp[i][j - 1][k - 1][l], dp[i][j - 1][k][l - 1])) + a[i][j] + a[k][l]
注意: 如果 (i, j) 和 (k, l) 相同的话只能 a[i][j], a[k][l] 只计算一个
代码:
#include <iostream>
using namespace std; const int MAXN = ;
int a[MAXN][MAXN], dp[MAXN][MAXN][MAXN][MAXN]; int main(void){
int n, m;
cin >> n >> m;
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
cin >> a[i][j];
}
}
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
for(int k = ; k <= n; k++){
for(int l = ; l <= m; l++){
dp[i][j][k][l] = max(max(dp[i - ][j][k - ][l], dp[i - ][j][k][l - ]), max(dp[i][j - ][k - ][l], dp[i][j - ][k][l - ]));
if(i != k || j != l) dp[i][j][k][l] += a[k][l];
dp[i][j][k][l] += a[i][j];
}
}
}
}
cout << dp[n][m][n][m] << endl;
return ;
}
51nod10084
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084
这道题和上面那题差不多,不过数据范围更大,用四维 dp 的话无论时间复杂度还是空间复杂度都是不允许的
可以发现,如果记录一下步数的话,可以根据步数和行数得出列数,那么也就和上面的差不多了
用 dp[i][x1][x2] 记录第 i 步时第一个人走到第 x1 行, 第二个人走到第 x2 行时对答案的最大贡献
那么动态转移方程式为:
dp[i][x1][x2] = max(max(dp[i - 1][x1][x2], dp[i - 1][x1][x2 - 1]), max(dp[i - 1][x1 - 1][x2], dp[i - 1][x1 - 1][x2 - 1])) + a[x1][y1] + a[x2][y2]
其中 y1 = i - x1, y2 = i - x2
注意: (x1, y1) 和 (x2, y2) 相同时 a[x1][y1], a[x2][y2] 只能计算一个
还有一个坑就是输入 n, m 的顺序是 m, n // 坑了我半天
代码:
#include <iostream>
using namespace std; const int MAXN = 2e2 + ;
int a[MAXN][MAXN], dp[MAXN << ][MAXN][MAXN]; int main(void){
int n, m;
cin >> m >> n;
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
cin >> a[i][j];
}
}
for(int i = ; i <= n + m; i++){
for(int x1 = ; x1 <= min(n, i); x1++){
int y1 = i - x1;
for(int x2 = ; x2 <= min(n, i); x2++){
int y2 = i - x2;
dp[i][x1][x2] = max(max(dp[i - ][x1][x2], dp[i - ][x1][x2 - ]), max(dp[i - ][x1 - ][x2], dp[i - ][x1 - ][x2 - ]));
if(x1 != x2 || y1 != y2) dp[i][x1][x2] += a[x2][y2];
dp[i][x1][x2] += a[x1][y1];
}
}
}
cout << dp[n + m][n][n] << endl;
return ;
}
codevs1169, 51nod1084(多线程dp)的更多相关文章
- Matrix(多线程dp)
Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 2686 Matrix 多线程dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 思路:多线程dp,参考51Nod 1084:http://www.51nod.com/onlin ...
- 51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084 1084 矩阵取数问题 V2 基准时间限制:2 秒 空 ...
- 8786:方格取数 (多线程dp)
[题目描述] 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点.在走 ...
- TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp
做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- (多线程dp)Matrix (hdu 2686)
http://acm.hdu.edu.cn/showproblem.php?pid=2686 Problem Description Yifenfei very like play a num ...
- NOIP 2008 传纸条 NOIP 2000 方块取数 多线程DP
思路都是一样,建立一个四维dp然后跑一发就完了 当然,也可以像我这么帅的人,降成三维再傻傻的跑一发啦啦啦~ #include<iostream> #include<stdio.h&g ...
- 51nod 1503 猪和回文(多线程DP)
虚拟两个点,一个从左上角开始走,一个从右下角开始走,定义dp[i][j][k]表示走了i步后,第一个点横向走了j步,第二个点横向走了k步后形成的回文方法种数. 转移方程显然可得,然后滚动数组搞一搞. ...
- CodeVS1169 传纸条 [DP补完计划]
题目传送门 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...
随机推荐
- bash的使用
转自:http://blog.csdn.net/y2888886/article/details/50535033 在上篇博文的基础上做如下修改 注意一些常见命令中间就要加 “ ” ,否则很多命令无法 ...
- Linq使用小记之Group By
private void cmbStore_SelectedIndexChanged(object sender, EventArgs e) { DataTable vDt = ParamClass. ...
- FileStream 常用的属性和方法
FileStream常用的属性和方法 (转) 对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取, ...
- Java 中的关键字和保留字
关键字: Java 语言中已经事先定义好了的,有着特殊含义和用途 访问控制 类.方法和变量修饰符 程序控制 异常处理 包相关 基本类型 变量引用 public abstract break try i ...
- 2016全国大学生信息安全竞赛(Misc)
你好,i春秋: 关注i春秋公众微信号,然后发送CTF,机器人会问星期几,按实回答,然后发送你好,机器人会回复你好,然后随便发几句,机器人会问是否愿意陪他聊天,回复不愿意,机器人就会发flag kill ...
- CentOS 7.2 部署Rsync + Lsyncd服务实现文件实时同步/备份 (三)
配置过程中遇到的错误与查看日志 以下错误是在服务正常开启的情况下发生的,请先查看服务是否正常启动. 一.错误 1. rsync: failed to set times on "." ...
- Laravel 在 with 查询中只查询个别字段
在使用 Laravel 的关联查询中,我们经常使用 with 方法来避免 N+1 查询,但是 with 会将目标关联的所有字段全部查询出来,对于有强迫症的我们来说,当然是不允许的. 这时候我们可以使用 ...
- docker 笔记(6)网络
docker network ls 默认docker安装时会创建3个网络 none网络 one 网络就是什么都没有的网络.挂在这个网络下的容器除了 lo,没有其他任何网卡.容器创建时,可以通过 - ...
- .net 4 安装未成功,无意中的解决办法!
公司 电脑是chost的系统,由于使用时间过长,重装纯净版系统的话,代价太大,故网上寻求各种解决办法! 安装.net 4 总是失败,查看百度,各种: WIN7系统哈哈跟我的问题一样,我的刚才解决了:1 ...
- python爬虫实战(3)--图片下载器
本篇目标 1.输入关键字能够根据关键字爬取百度图片 2.能够将图片保存到本地文件夹 1.URL的格式 进入百度图片搜索apple,这时显示的是瀑布流版本,我们选择传统翻页版本进行爬取.可以看到网址为: ...