把题意写一下:  给你一个n*n的矩阵,每个格子都有一个非负整数,从左上角走到右下角,收集走过的数字,累加,但是只能向右或者向下走,走过之后数字就变为0,让你求从左上角到右下角,走k次之后,所得的最大值是多少。

典型的最小费用最大流入门题,只需在建图时,把源点到1的cap设成k,对走完一次变成0的处理时,只需拆点,拆成两条边,一条容量为1,权值为点权,另一条是跳板,容量为inf,费用为0,即可

****************************************************************************************************************

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #define M 200001
  4 #define maxx 2000
  5 #define Max(a, b) a > b ? a : b
  6 #define Min(a, b) a < b ? a : b
  7 #define inf (1 << 29)
  8 struct T
  9 {
 10     int u, v, val, next, cost;
 11 } e[M];
 12 int th;
 13 int visit[M], pre[M], dis[M], que[M], g[M], pos[M], map[100][100];
 14 void add(int u, int v, int val, int cost)
 15 {
 16     e[th].u = u, e[th].v = v, e[th].val = val, e[th].cost = cost;
 17     e[th].next = g[u], g[u] = th++;
 18     e[th].u = v, e[th].v = u, e[th].val = 0, e[th].cost = -cost;
 19     e[th].next = g[v], g[v] = th++;
 20 }
 21 int spfa(int s, int t, int n)
 22 {
 23     int i, u, v, k;
 24     for (i = 0; i <= n; i++)
 25     {
 26         pre[i] = -1, visit[i] = 0;
 27     }
 28     int head, tail;
 29     head = tail = 0;
 30     for (i = 0; i <= n; i++) dis[i] = -1;//求最小费用时这里得改成正无穷
 31     que[tail++] = s, pre[s] = s, dis[s] = 0, visit[s] = 1;
 32     while (head != tail)
 33     {
 34         int u = que[head++];
 35         visit[u] = 0;
 36         for (k = g[u]; k != -1; k = e[k].next)
 37         {
 38             v = e[k].v;
 39             if (e[k].val > 0 && dis[u] + e[k].cost > dis[v])//最大费用,求最小费用时这里的改符号
 40             {
 41                 dis[v] = dis[u] + e[k].cost;
 42                 pre[v] = u;
 43                 pos[v] = k;
 44                 if (!visit[v])
 45                 {
 46                     visit[v] = 1;
 47                     que[tail++] = v;
 48                 }
 49             }
 50         }
 51     }
 52     if (pre[t] != -1 && dis[t] > -1)//求最小费用时这里改成dit[t] < 正无穷
 53     {
 54         return 1;
 55     }
 56     return 0;
 57 }
 58 int MinCostFlow(int s, int t, int n)
 59 {
 60     if (s == t)
 61     {
 62         //这里具体情况具体分析,如果有附加s跟t就不用,如果用数据中的点作为s跟t就得考虑
 63         //直接返回某个值。否则spfa里的队列会死循环。
 64     }
 65     int flow = 0, cost = 0;
 66     while (spfa(s, t, n))
 67     {
 68         int u, min = inf;
 69         for (u = t; u != s; u = pre[u])
 70         {
 71             min = Min(min, e[pos[u]].val);
 72         }
 73         flow += min;
 74         cost += dis[t] * min;
 75         for (u = t; u != s; u = pre[u])
 76         {
 77             e[pos[u]].val -= min;
 78             e[pos[u]^1].val += min;
 79         }
 80     }
 81     return cost;
 82 }
 83 int main()
 84 {
 85     int n, m, i, j, k, s, t, u, v, cost, ans, x, num, tt;
 86     while (scanf("%d%d", &n, &m) - EOF)
 87     {
 88         for (i = 0, th = 0; i < n * n * 3 + 2; i++)
 89         {
 90             g[i] = -1;
 91         }
 92         for (i = 0; i < n; i++)
 93         {
 94             for (j = 0; j < n; j++)
 95             {
 96                 scanf("%d", &map[i][j]);
 97             }
 98         }
 99         num = n * n;
100         for (i = 0; i < n; i++)
101         {
102             for (j = 0; j < n; j++)
103             {
104                 x = i * n + j;
105                 add(x, x + num, 1, map[i][j]);
106                 add(x, x + num, inf, 0);
107                 if (i + 1 < n)
108                 {
109                     add(x + num, x + n, inf, 0);
110                 }
111                 if (j + 1 < n)
112                 {
113                     add(x + num, x + 1, inf, 0);
114                 }
115             }
116         }
117         s = 2 * n * n, t = s + 1, n = t + 1;
118         add(s, 0, m, 0);
119         add(s - 1, t, m, 0);
120         ans = MinCostFlow(s, t, t + 1);
121         printf("%d\n", ans);
122     }
123     return 0;
124 }

View Code

转载于:https://www.cnblogs.com/sdau--codeants/p/3534734.html

hdu Kaka's Matrix Travels(最小费用最大流)相关推荐

  1. poj 3422 Kaka's Matrix Travels(最小费用最大流)

    题目链接 Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9394   Accep ...

  2. poj3422 Kaka's Matrix Travels(最小费用最大流问题)

    1 /* 2 poj3422 Kaka's Matrix Travels 3 不知道 k次 dp做为什么不对??? 4 看了大牛的代码,才知道还可以这样做! 5 开始没有理解将a 和 a' 之间建立怎 ...

  3. pku 3422 Kaka's Matrix Travels 最大费用最大流

    http://poj.org/problem?id=3422 /* 题意:给定一个n*n的矩形方格,要求从(1,1)出发,只能往右下角走,(i + 1,j) 或者 (i + n,j)每次走完将格子里面 ...

  4. POJ3422 Kaka's Matrix Travels

    描述 On an N × N chessboard with a non-negative number in each grid, Kaka starts his matrix travels wi ...

  5. Kaka's Matrix Travels(减弱版) DP版

    Kaka's Matrix Travels(减弱版) Time Limit:5000MS  Memory Limit:65536K Total Submit:15 Accepted:8 Descrip ...

  6. HDU 2282 Chocolate (最小费用最大流)

    HDU  2282 Chocolate (最小费用最大流) #include <iostream> #include <cstdio> #include <queue&g ...

  7. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  8. 2018ACM上海大都会赛: I. Matrix Game(最小费用最大流)

    题目描述 At the start of the matrix game, we have an N x M matrix. Each grid has some balls. The grid in ...

  9. 【HDU - 6118】度度熊的交易计划(最小费用可行流,网络流费用流变形 )

    题干: 度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个 ...

最新文章

  1. python练习题(python之“求一个数的阶乘并求结果中从后向前数第一个不为0(零)的数” 等)
  2. tcp时间戳 引起的网站不能访问
  3. 二叉树重建(c++)
  4. GPU高效通信算法-Ring Allreduce
  5. Install KVM Hypervisor on arrch64 Linux Server
  6. PHP调用wsdl文件类型的接口代码分享
  7. lucky前面加a还是an_“不可数”名词前何时加a/an,何时不加?来自本站教师群的两道典型题问答,揭示了规律 白话英语201931...
  8. Popupwin结合Timer实现定时弹出消息提示
  9. iPhone 9上架了?5月1日发货?
  10. Greeting Card 模拟
  11. 计算机专业课系列之四:漫谈操作系统之虚拟内存
  12. 数组-scala数组与java的list的互转
  13. 【acl-访问控制列表】
  14. position之属性
  15. 打造自己的Android源码学习环境之三:在虚拟机中安装Ubuntu(下)
  16. js表单验证(提示版)
  17. android多个app音量调节问题,「App 音量控制」依每个 App 的使用需求自动调整音量(Android)...
  18. 异常检测的总结性介绍
  19. 发现一个好用的层级多项目管理工具
  20. 5g通用模组是什么_目前主流的5G模组有哪些?

热门文章

  1. 利用代码审查元素解除百度云客户端限制方法
  2. app华为市场上架总结
  3. 1218直播节,花椒与北京卫视会密谋什么新局?
  4. 收藏:关于色彩的心理重量
  5. 弘辽科技:商家开店的过程中常犯违规汇总。
  6. 【翻译】Deep Anatomical Context Feature Learning for Cephalometric Landmark Detection
  7. 2018微策略用户峰会北京站举行 企业级BI魅力无处不
  8. mcp2515 linux 设备树,mcp2515驱动的实现
  9. matlab 除了cov,matlab中cov的处理方法
  10. 让Facebook疯狂元宇宙是啥?揭露一家蹭热度不要face的上市公司!