[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.pswp.cn/news/251939.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251939.shtml
英文地址,請注明出處:http://en.pswp.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考慮在下面被顯示的數字金字塔. 寫一個程序來計算從最高點開始在底部任意處結束的路徑經過數字的和的最大. 每一步可以走到下方的點也可以到達右…