先说下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)的更多相关文章

  1. Matrix(多线程dp)

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. HDU 2686 Matrix 多线程dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 思路:多线程dp,参考51Nod 1084:http://www.51nod.com/onlin ...

  3. 51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084 1084 矩阵取数问题 V2  基准时间限制:2 秒 空 ...

  4. 8786:方格取数 (多线程dp)

    [题目描述] 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点.在走 ...

  5. TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp

    做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  6. (多线程dp)Matrix (hdu 2686)

    http://acm.hdu.edu.cn/showproblem.php?pid=2686     Problem Description Yifenfei very like play a num ...

  7. NOIP 2008 传纸条 NOIP 2000 方块取数 多线程DP

    思路都是一样,建立一个四维dp然后跑一发就完了 当然,也可以像我这么帅的人,降成三维再傻傻的跑一发啦啦啦~ #include<iostream> #include<stdio.h&g ...

  8. 51nod 1503 猪和回文(多线程DP)

    虚拟两个点,一个从左上角开始走,一个从右下角开始走,定义dp[i][j][k]表示走了i步后,第一个点横向走了j步,第二个点横向走了k步后形成的回文方法种数. 转移方程显然可得,然后滚动数组搞一搞. ...

  9. CodeVS1169 传纸条 [DP补完计划]

    题目传送门 题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...

随机推荐

  1. uboot指令和环境变量

    一.uboot指令 1.printenv(pri) - 打印环境变量 2.setenv - 设置环境变量,和saveenv 配合使用 3.saveenv - 保存环境变量 4.run - 执行设置好的 ...

  2. Spring单例Bean和线程安全

    Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框 ...

  3. PHP实现常用排序算法(含示意动图)

    目录 1 快速排序 2 冒泡排序 3 插入排序 4 选择排序 5 归并排序 6 堆排序 7 希尔排序 8 基数排序 总结 作为phper,一般接触算法的编程不多. 但基本的排序算法还是应该掌握. 毕竟 ...

  4. 10-13C#语句(1)

    C#语句:判断.循环.形成程序的分支和循环 1.语句分类 1)顺序语句 2)分支语句 3)循环语句 2.语句 选择控制:if,else,switch,case 循环控制:while,do,for,fo ...

  5. VotingClassifier

    scores : array of float, shape=(len(list(cv)),) Array of scores of the estimator for each run of the ...

  6. Diag:Diagonal matrices and diagonals of a matrix

    Diag:Diagonal matrices and diagonals of a matrix Syntax X = diag(v,k) X = diag(v) v = diag(X,k) v =  ...

  7. tomcat跑多个项目和不同端口访问项目

    最近笔者在工作中需要同时运行多个项目,且有时需要不同端口访问项目:在此过程中,笔者觉得有必要将注意事项记录一下,以备后边查阅或广大读者借鉴. 工作环境是win7,64位,IDE为eclipse,浏览器 ...

  8. Javascript面向对象(三):非构造函数的继承

    这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是 ...

  9. bash: telnet: command not found

    //安装telnet服务 yum -y install telnet-server //安装telnet客户端 yum -y install telnet.*

  10. 数据库开源框架ormlite

    今天听说了ORM框架ORMLITE,特地去了解了一下. 该框架可以使用注解方式来生成数据库表,还封装了常用的数据库操作. 类似J2EE的HIBERNATE框架对数据库的处理. 省去了书写建表语句的麻烦 ...