hebust 1214 方格取数 (多进程dp)
2017-06-09 21:33
218 查看
方格取数 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0。如下图所示(见样例 ,黄色和蓝色分别为两次走的路线,其中绿色的格子为黄色和蓝色共同走过的):
。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Input | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
有多组测试数据,每组格式如下: 第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Output | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
与输入对应,有多组输出,每组只需输出一个整数,表示2条路径上取得的最大的和。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sample Input | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 2 3 13 2 6 6 3 5 7 4 4 14 5 2 21 5 6 4 6 3 15 7 2 14 0 0 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sample Output | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
67 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Source | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NOIp2000提高组 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Recommend | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
黄李龙 |
多进程dp
(i,j)代表第一个人的行走 (k,l)代表第二个人行走的点
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
for(int ii = 1; ii <= n; ii++){
for(int jj = 1; jj <= n; jj++){
dp[i][j][ii][jj] = max(dp[i-1][j][ii-1][jj], max(dp[i-1][j][ii][jj-1],
max(dp[i][j-1][ii-1][jj], dp[i][j-1][ii][jj-1]))) + a[i][j] + a[ii][jj];
if(i == ii && j == jj) dp[i][j][ii][jj] -= a[i][j];
}
}
}
}
这个地方处理的很棒棒啊。。。。
dp[i][j][k][l]代表 第一个人走到 i,j 点 第二个人走到 K,l点
如果 两个点相同只加上一个点就够了不能重复加
///直接用队友的代码吧
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[15][15];
int dp[15][15][15][15];
struct xx{
int u, v;
} f[10001];
int main(){
while(scanf("%d", &n) == 1){
int u, v, w;
memset(dp, 0, sizeof(dp));
memset(a, 0, sizeof(a));
while(scanf("%d%d%d", &u, &v, &w) == 3){
if(u == 0 && v == 0 && w == 0) break;
a[u][v] = w;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
for(int ii = 1; ii <= n; ii++){
for(int jj = 1; jj <= n; jj++){
dp[i][j][ii][jj] = max(dp[i-1][j][ii-1][jj], max(dp[i-1][j][ii][jj-1],
max(dp[i][j-1][ii-1][jj], dp[i][j-1][ii][jj-1]))) + a[i][j] + a[ii][jj];
if(i == ii && j == jj) dp[i][j][ii][jj] -= a[i][j];
}
}
}
}
printf("%d\n", dp
);
}
}
/*
3
1 2 3
2 1 4
2 2 5
0 0 0
4
2 3 3
3 2 4
3 3 5
0 0 0
*/
相关文章推荐
- Hrbust - 1214 方格取数(DP)
- HRBUST 1214取方格(DP)
- hrbust 1214 哈理工oj 1214 方格取数【BFS广搜+dp】
- Vijos P1143 三取方格数(动态规划,多进程DP)
- CODE[VS]1043 方格取数(多进程DP)
- 方格取数 (多进程DP)
- 方格取数&传纸条【多进程DP】
- AYOJ 方格取数(多进程DP)
- hdu 1565 方格取数(1)(状态压缩dp)
- 【hpu oj 1015 985的方格难题 [DP、数学] 】 dc29
- 走方格改进版dp
- poj 2964 双进程DP
- vijos p1014 (旅行商简化版 双进程DP)
- 多进程DP
- HDU1565 方格取数(1) (状态压缩DP)
- hdu 2686 Matrix ( 多进程DP)
- Problem C: 985的方格难题(dp)
- OpenJudge_P8786 方格取数(DP)
- 方格取数(1)(HDU 1565状压dp)
- hdoj 2046 骨牌铺方格 【DP】+【斐波那契】