HRBUST 1214 方格取数
方格取数
This problem will be judged on HRBUST. Original ID: 1214
64-bit integer IO format: %lld Java class name: Main
设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0。如下图所示(见样例 ,黄色和蓝色分别为两次走的路线,其中绿色的格子为黄色和蓝色共同走过的):
A
|
|||||||
13 | 6 | ||||||
7 | |||||||
14 | |||||||
21 | 4 | ||||||
15 | |||||||
14 | |||||||
B
|
某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大
。
Input
第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
Output
Sample Input
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
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <climits>
- #include <vector>
- #include <queue>
- #include <cstdlib>
- #include <string>
- #include <set>
- #include <stack>
- #define LL long long
- #define pii pair<int,int>
- #define INF 0x3f3f3f3f
- using namespace std;
- const int maxn = ;
- struct arc{
- int v,w,f,next;
- arc(int x = ,int y = ,int z = ,int nxt = ){
- v = x;
- w = y;
- f = z;
- next = nxt;
- }
- };
- arc e[];
- int head[maxn],d[maxn],p[maxn],S,T,n,mp[][],tot;
- bool in[maxn];
- queue<int>q;
- void add(int u,int v,int w,int f){
- e[tot] = arc(v,w,f,head[u]);
- head[u] = tot++;
- e[tot] = arc(u,-w,,head[v]);
- head[v] = tot++;
- }
- bool spfa(){
- for(int i = ; i < maxn; i++){
- d[i] = INF;
- in[i] = false;
- p[i] = -;
- }
- while(!q.empty()) q.pop();
- d[S] = ;
- in[S] = true;
- q.push(S);
- while(!q.empty()){
- int u = q.front();
- q.pop();
- in[u] = false;
- for(int i = head[u]; ~i; i = e[i].next){
- if(e[i].f > && d[e[i].v] > d[u] + e[i].w){
- d[e[i].v] = d[u] + e[i].w;
- p[e[i].v]= i;
- if(!in[e[i].v]){
- in[e[i].v] = true;
- q.push(e[i].v);
- }
- }
- }
- }
- return p[T] > -;
- }
- int solve(){
- int tmp = ,minV;
- while(spfa()){
- minV = INF;
- for(int i = p[T]; ~i; i = p[e[i^].v])
- minV = min(minV,e[i].f);
- for(int i = p[T]; ~i; i = p[e[i^].v]){
- e[i].f -= minV;
- e[i^].f += minV;
- tmp += minV*e[i].w;
- }
- }
- return tmp;
- }
- int main() {
- int x,y,w;
- while(~scanf("%d",&n)){
- memset(mp,,sizeof(mp));
- memset(head,-,sizeof(head));
- S = tot = ;
- T = n*n*+;
- while(scanf("%d %d %d",&x,&y,&w),x||y||w) mp[x][y] = w;
- for(int i = ; i <= n; i++){
- for(int j = ; j <= n; j++){
- add(n*(i-)+j,n*(i-)+j+n*n,-mp[i][j],);
- add(n*(i-)+j,n*(i-)+j+n*n,,INF);
- if(i < n) add(n*(i-)+j+n*n,n*i+j,,INF);
- if(j < n) add(n*(i-)+j+n*n,n*(i-)+j+,,INF);
- }
- }
- add(S,,,);
- add(n*n*,T,,);
- printf("%d\n",-solve());
- }
- return ;
- }
HRBUST 1214 方格取数的更多相关文章
- HRBUST - 1214 NOIP2000提高组 方格取数(多线程dp)
方格取数 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0.如下图所示(见样例 ,黄色和蓝色分别为两次走的路线,其中绿色的格子为黄色和蓝色共同走过的 ...
- HDU 1565&1569 方格取数系列(状压DP或者最大流)
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- NOIP200003方格取数
NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...
- vijos 1563 疯狂的方格取数
P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签] 背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...
- [HDU 1565+1569] 方格取数
HDU 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- HDU-1565 方格取数(1)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Me ...
- BZOJ 1475: 方格取数( 网络流 )
本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...
- [动态规划]P1004 方格取数
---恢复内容开始--- 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 ...
随机推荐
- samba笔记
############ 1.安装网络yum ############ 2.安装createrepo [root@localhost ~]# yum install createrepo-0.9.8- ...
- jQuery - 选中复选框则弹出提示框
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- oc28--Property增强
// // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject /* { @public int ...
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合” 最近更新: 2013-2-15 587 很少写WinForm程序第一次使用ListBox控件就遇到了比 ...
- mysql数据库操作(1)
1.mysql 数据库备份: 语法: MYSQLDUMP -uUSER -pPASS DataBase > Path 其中:USER 是用户名,PASS 是密码,DataBase 是数据库名, ...
- PCB WCF Web接口增减参数后,在客户端不更新的情况,是否影响客户端,评估测试
1.目的:由于接口众多,服务端变更接口,会造成服务停用更新,造成客户端不能使用或报错, 在此评估[Web中心]此服务端,接口接口参数增加或减少,是否对客户端造成影响 2.评估内容:服务端增加单值参数, ...
- codevs1253 超级市场(dp)
1253 超级市场 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某人喜欢按照自己的规则去市场买菜,他每天 ...
- 洛谷P2916 [USACO08NOV]为母牛欢呼(最小生成树)
P2916 [USACO08NOV]为母牛欢呼Cheering up the C… 题目描述 Farmer John has grown so lazy that he no longer wants ...
- hdu3507Print Article(斜率优化dp)
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- A - Fox And Snake
Problem description Fox Ciel starts to learn programming. The first task is drawing a fox! However, ...