[Vijos 1143]三取方格数

Description

设有N*N的方格图,我们将其中的某些方格填入正整数,
而其他的方格中放入0。

某人从图得左上角出发,可以向下走,也可以向右走,直到到达右下角。

在走过的路上,他取走了方格中的数。(取走后方格中数字变为0)
此人从左上角到右下角共走3次,试找出3条路径,使得取得的数总和最大。

Input

第一行:N (4<=N<=20)
接下来一个N*N的矩阵,矩阵中每个元素不超过80,不小于0

Output

一行,表示最大的总和。

Sample Input

4
1 2 3 4
2 1 3 4
1 2 3 4
1 3 2 4

Sample Output

39

题解(转载)

->原文地址<-

$DP$好题。

这里给出费用流的做法:

拆点建图,每一个点都拆成两个点,在这里就称为出点和入点。

出点和入点建两条边,一条费用为$s[i][j]$,流量为$1$;一条费用为$0$,流量为$inf$。(分别表示选择这个点和从这个点上经过)

将$(i,j)$的出点分别和$(i+1,j)$$(i,j+1)$的入点建边,流量为$inf$,费用为$0$。(表示行进)

跑一边最大费用最大流就可以了。

 1 #include <set>
 2 #include <map>
 3 #include <ctime>
 4 #include <cmath>
 5 #include <queue>
 6 #include <stack>
 7 #include <vector>
 8 #include <cstdio>
 9 #include <string>
10 #include <cstring>
11 #include <cstdlib>
12 #include <iostream>
13 #include <algorithm>
14 #define LL long long
15 #define Max(a, b) ((a) > (b) ? (a) : (b))
16 #define Min(a, b) ((a) < (b) ? (a) : (b))
17 using namespace std;
18 const int INF = ~0u>>1;
19 
20 int n;
21 int a[25][25];
22 struct tt{
23     int to, cost, next, cap;
24 }edge[5005];
25 int path[1005], top = -1;
26 void Add(int u, int v, int cost, int cap);
27 int sta = 999, fin = 1000;
28 int min_cost_flow();
29 int SPFA();
30 
31 int main(){
32     memset(path, -1, sizeof(path));
33     scanf("%d", &n);
34     for (int i = 0; i < n; i++)
35     for (int j = 0; j < n; j++)
36         scanf("%d", &a[i][j]);
37     for (int i = 0; i < n; i++)
38     for (int j = 0; j < n; j++){
39         Add(i*n+j, (i+n)*n+j, a[i][j], 1);
40         Add(i*n+j, (i+n)*n+j, 0, INF);
41         if (i != n-1) Add((i+n)*n+j, (i+1)*n+j, 0, INF);
42         if (j != n-1) Add((i+n)*n+j, i*n+j+1, 0, INF);
43     }
44     Add(sta, 0, 0, 3);
45     Add((2*n-1)*n+n-1, fin, 0 ,3);
46     printf("%d\n", min_cost_flow());
47     return 0;
48 }
49 
50 void Add(int u, int v, int cost, int cap){
51     edge[++top].to = v;
52     edge[top].cost = cost;
53     edge[top].cap = cap;
54     edge[top].next = path[u];
55     path[u] = top;
56     edge[++top].to = u;
57     edge[top].cost = -cost;
58     edge[top].cap = 0;
59     edge[top].next = path[v];
60     path[v] = top;
61 }
62 int min_cost_flow(){
63     int tolcost = 0;
64     int tmp;
65     while (tmp = SPFA()) tolcost += tmp;
66     return tolcost;
67 }
68 int SPFA(){
69     int dist[1005];
70     memset(dist, 128, sizeof(dist)); dist[sta] = 0; dist[fin] = -INF;
71     bool vis[1005] = {0}; vis[sta] = 1;
72     queue<int>Q;
73     while (!Q.empty()) Q.pop();
74     Q.push(sta);
75     int pre[1005] = {0};
76     while (!Q.empty()){
77       int u = Q.front(); Q.pop(); vis[u]=0;
78       for (int i = path[u]; i != -1; i = edge[i].next){
79           int v = edge[i].to;
80           if (dist[v] < dist[u]+edge[i].cost && edge[i].cap > 0){
81             dist[v] = dist[u]+edge[i].cost;
82             pre[v] = i;
83             if (!vis[v]){
84                 vis[v] = 1;
85                 Q.push(v);
86             }
87           }
88       }
89     }
90     if (dist[fin] == -INF) return 0;
91     int minflow = INF;
92     for (int i = fin; i != sta; i = edge[pre[i]^1].to)
93       minflow = Min(minflow, edge[pre[i]].cap);
94     for (int i = fin; i != sta; i = edge[pre[i]^1].to)
95       edge[pre[i]].cap -= minflow,
96       edge[pre[i]^1].cap += minflow;
97     return dist[fin];
98 }

 

转载于:https://www.cnblogs.com/NaVi-Awson/p/7460488.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线扫相机相关规格说明

工业线阵相机与面阵相机特点分析 点滴成海~ 2018-06-29 13:50:38 12184 收藏 29 分类专栏&#xff1a; intership 文章标签&#xff1a; 视觉元件分析 版权 最近在公司实习&#xff0c;实习中的项目是使用的是微视的一款线阵相机&#xff08;Microview MVC1024DLM-GE35&…

postgresql 不同数据库不同模式下的数据迁移

编写不容易,转载请注明出处谢谢, 数据迁移 因为之前爬虫的时候&#xff0c;一部分数据并没有上传到服务器&#xff0c;在本地。本来用的就是postgresql&#xff0c;也没用多久&#xff0c;数据迁移的时候&#xff0c;也遇到了很多问题&#xff0c;第一次使pg_dump xx > file…

Oracle中主键自增长

最近在学习Oracle和MySql&#xff0c;MySql有自动配置主键自增长auto_increment&#xff0c;这样在输入数据的时候可以不考虑主键的添加&#xff0c;方便对数据库的操作。 在Oracle中设置自增长首先用到sequence序列&#xff1b; 以创建学生表为例&#xff1a; create table St…

3.单例模式

public class Singleton {//定义私有的静态变量 private static Singleton singleton;//私有化构造函数private Singleton(){}//获取实例public static Singleton getInstance(){//同步前判断避免同步的性能损耗if(nullsingleton){//预防多线程问题synchronized(Singleton.clas…

docker与mmdetection

这里不再介绍 mmdetection 的安装和配置&#xff0c;使用 mmdetection 较简单的方法是使用已安装 mmdetection 的 docker 容器。这样直接省去了安装 mmdetection 的过程&#xff0c;让重心放在模型训练上&#xff01; 如果你对 docker 和 mmdetection 还不是很熟悉&#xff0c…

互联网平台掘金三四五线城市,你需要知道的9.9个真相

互联网上半场结束&#xff0c;一二线城市流量红利消失&#xff0c;许多互联网平台、投资机构一度经历至黑之夜。融资失败、公司倒闭、大裁员迭出。对比鲜明的是&#xff0c;深耕三四五线城市的互联网平台正在迅猛崛起。春节期间&#xff0c;小部分敏锐的业者注意到互联网产品在…

平滑重启更新(GR机制)

平滑重启更新&#xff08;GR机制&#xff09; 什么是平滑启动机制 是一种在协议重启时保证转发业务不中断的机制。什么时候用到平滑重启 平滑重启一般应用于业务更新或者版本发布过程中&#xff0c;能够避免因为代码发布重启服务导致的暂时性服务不可用的影响。ngnix 平滑重启和…

正斜杠( / )和反斜杠( \ )的区别

反斜杠“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点。所以除了程序设计领域外&#xff0c;任何地方都不应该使用反斜杠。 如何区分正反斜杠 英语&#xff1a;"/" 英文是forward slash, “\" 是backward slash形象些比喻的话&#xff0c;…

MMDetectionV2 + Colab

MMDetectionV2 Colab 超详细教程及踩坑实录 文章目录 前言一、环境配置二、准备自己的数据集 Aug.14更新三&#xff1a;修改config文件 3.1 文件结构3.2 &#xff08;本地&#xff09;修改config文件 3.2.1 &#xff08;本地&#xff09;构造自己模型的权重文件3.2.2 &#x…

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

刚刚&#xff0c;OpenStack 第 19 个版本来了&#xff0c;附28项特性详细解读&#xff01; OpenStack Stein版本引入了新的多云编排功能&#xff0c;以及帮助实现边缘计算用例的增强功能。 OpenStack由一系列相互关联的项目组成&#xff0c;这些项目可以以不同的组合方式组合在…

SQL作业:综合练习(二)的返评

一&#xff1a;作业题目&#xff1a;综合练习&#xff08;二&#xff09; 二&#xff1a;题目要求&#xff1a; 1、创建数据库CPXS&#xff0c;保存于E盘根目录下以自己学号姓第一个字母&#xff08;阿拉伯数字大写字母&#xff09;方式创建的文件夹中&#xff0c;初始大小5MB&…

caffe cifar10试跑问题总结

caffe cifar10试跑问题总结 [daniel] 写了一个脚本可以直接用来添加环境变量&#xff1a;/Users/songdanzju/daniel_script/export_for_ananconda.sh#! /bin/bash export PATH~/ananconda/bin:$PATH export DYLD_FALLBACK_LIBRARY_PATH~/anaconda:~/anaconda/lib:/usr/local/l…

paddlepaddle-VisualDL2.0对项目进行可视化调参

如果需要更好的阅读体验&#xff0c;可以在ai studio上fork该项目&#xff1a;使用VisualDL2.0对项目进行可视化调参 调参是深度学习必须要做的事情。数据和模型处理好后&#xff0c;需要进行模型训练&#xff0c;这个时候就需要进行调参了。一种好的参数配置&#xff0c;可以…

第一、二次实训作业

1.编写程序&#xff1a; 声明一个整型变量a&#xff0c;并赋初值5&#xff0c;在程序中判断a是奇数还是偶数&#xff0c;然后输出判断的结果。 package 判断奇偶; public class liux { public static void main(String[] args){ int x5; if(x%20){ System.out.println("这…

推荐一款作图工具

以前看到别人的时序图觉得好好看&#xff0c;然后就想这都是用的什么工具画出来的呢&#xff1f;然后看到了一个师兄用的这个工具&#xff0c;真的挺好用的。这是是试用版的界面。类图我觉着看起来效果都挺不错的。转载于:https://www.cnblogs.com/tuhooo/p/8874410.html

【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

cf的比赛越来越有难度了……至少我做起来是这样。 先看看题目吧&#xff1a;点我。 这次比赛是北京时间21:35开始的&#xff0c;算是比较良心。 【A】奇数与结束 "奇数从哪里开始&#xff0c;又在哪里结束&#xff1f;梦想从何处起航&#xff0c;它们又是否会破灭呢&#…

PaddleDetection支持的数据格式

PaddleDetection支持的数据格式 目前#PaddleDetection支持43种数据格式&#xff1a;coco voc widerface。在这里我们主要说明一下如何使用自定义COCO进行目标检测、实例分割&#xff1b;如何使用自定义VOC数据集进行目标检测。在PaddleDetection新的版本中&#xff0c;我们将数…

[dts]Device Tree机制【转】

转自&#xff1a;https://www.cnblogs.com/aaronLinux/p/5496559.html 转自&#xff1a;http://blog.csdn.net/machiner1/article/details/47805069 ------------------Based on linux 3.10.24 source code 参考/documentation/devicetree/Booting-without-of.txt文档 目录 1.…

AntiSamy测试

AntiSamy为owasp针对xss提供的处理库&#xff0c;可以配置xml策略来决定过滤的内容&#xff0c;比如标签、属性、css等&#xff0c;自定义策略给开发人员使用成本比较高&#xff0c;AntiSamy也提供了几个内置的策略&#xff0c;其安全级别也不同&#xff0c;过滤的内容也不一样…

1625 数字金字塔

1625 数字金字塔 链接&#xff1a;http://codevs.cn/problem/1625/ USACO 时间限制: 1 s空间限制: 128000 KB题目描述 Description考虑在下面被显示的数字金字塔. 写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大. 每一步可以走到下方的点也可以到达右…