CODE[VS] 1043 方格取数
来源:互联网 发布:ajax传递json对象实例 编辑:程序博客网 时间:2024/06/08 16:08
题目链接:
CODE[VS] 1043 方格取数
题目描述 Description
设有N * N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数.此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
思路:
跟传纸条是一个题,不过有了新的体会.
dp[x1][y1][x2][y2] = max:{dp[x1-1][y1][x2-1][y2],dp[x1-1][y1][x2][y2-1],dp[x1][y1-1][x2][y2-1],dp[x1][y1-1][x2][y2-1]} + a[x1][y1];if(x1!=x2 && y1 != y2) dp[x1][y1][x2][y2] += a[x2][y2]; //这下清晰了吧....
#include<iostream>#include<stdio.h>#include<cstring>#include<cstdlib>#include<algorithm>#define LL long longusing namespace std;const int N = 58;int dp[N][N][N][N]; int a[N][N]; int main(){ int n; cin>>n; while(1) { int x, y, w; cin>>x>>y>>w; if(x+y+w == 0 ) break; a[x][y] = w; } for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) for(int k = 1; k <= n; k++) for(int h = 1; h <= n; h++) { dp[i][j][k][h] = max(dp[i-1][j][k-1][h], max(dp[i-1][j][k][h-1], max(dp[i][j-1][k-1][h], dp[i][j-1][k][h-1]))) + a[i][j]; if(i!=k && j!= h) dp[i][j][k][h] += a[k][h]; } printf("%d\n", dp[n][n][n][n]); return 0;}
0 0
- CODE[VS] 1043 方格取数
- CODE[VS]1043 方格取数(多进程DP)
- code vs 1227 方格取数 2
- code vs 方格取数3
- wikioi 1043 方格取数
- wiki 1043 方格取数
- codevs-1043 方格取数
- codevs 1043方格取数
- 【codevs 1043】方格取数
- codevs 1043 方格取数 (DP)
- 方格取数(1)
- 方格取数(2)
- 关于方格取数
- 方格取数
- 方格取数
- 方格取数(1)
- 方格取数(2)
- 方格取数
- 言简意赅告诉你KMP算法的原理,不管你信不信,我信了
- 【MFC】:MFC如何获得系统时间?
- tableView 滑动删除
- css:box-sizing总结
- 析构函数中不应该抛出异常(摘录)
- CODE[VS] 1043 方格取数
- python数据库模块
- ​MyEclipse2014发布webservi…
- matlab编译为exe的一些问题
- 2016蓝桥杯B组——NO.4
- Div Article Setion三者的区别
- 用 installanywhere2009打包java程序 带有mysql数据库
- Oracle所有约束
- Matlab代码的耗时分析、优化…