Codeforces 1107一题除了dp做法还有二分带权匹配O(n^3)做法,国外网友的板子时间非常优秀,但矩阵设定的事情并不是很懂……

  1. //Codeforces 1107F
  2. const int maxn = 505;
  3. int n;
  4. ll a, b, k, Matrix[maxn][maxn];
  5. using T = ll;
  6. T Hungary_Algorithm(int n, int m) {
  7. vector<T> u(n + 1), v(m + 1);
  8. vector<int> p(m + 1), way(m + 1);
  9. for (int i = 1; i <= n; ++i) {
  10. p[0] = i;
  11. int j0 = 0;
  12. vector<T> minv(m + 1, INF);
  13. vector<char> used(m + 1, 0);
  14. do {
  15. used[j0] = 1;
  16. int i0 = p[j0], j1 = 0;
  17. T d = INF;
  18. for (int j = 1; j <= m; ++j)
  19. if (!used[j]) {
  20. T cur = Matrix[i0][j] - u[i0] - v[j];
  21. if (cur < minv[j])
  22. minv[j] = cur, way[j] = j0;
  23. if (minv[j] < d)
  24. d = minv[j], j1 = j;
  25. }
  26. for (int j = 0; j <= m; ++j)
  27. if (used[j])
  28. u[p[j]] += d, v[j] -= d;
  29. else
  30. minv[j] -= d;
  31. j0 = j1;
  32. } while(p[j0] != 0);
  33. do {
  34. int j1 = way[j0];
  35. p[j0] = p[j1];
  36. j0 = j1;
  37. } while (j0);
  38. }
  39. vector<int> ans(n + 1);
  40. for (int j = 1; j <= m; ++j)
  41. ans[p[j]] = j;
  42. T cost = -v[0];
  43. return cost;
  44. }
  45. int main() {
  46. ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  47. cin >> n;
  48. rep(i, 1, n) {
  49. cin >> a >> b >> k;
  50. rep(j, 1, n) {
  51. //Matrix表示第i种卡在距最后一天(j-1)天时借走能得到的钱数,本题需要最大费用故而取负
  52. Matrix[i][j] = min(0LL, -(a - b * min((ll)j - 1, k)));
  53. }
  54. }
  55. cout << -Hungary_Algorithm(n, n) << endl;
  56. return 0;
  57. }

Hungary Algorithm国外板子的更多相关文章

  1. Code[VS] 1022 覆盖 题解

    Code[VS] 1022 覆盖 题解  Hungary Algorithm 题目传送门:Code[VS] 1022 题目描述 Description 有一个N×M的单位方格中,其中有些方格是水塘,其 ...

  2. poj3041

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12162   Accepted: 6620 Descri ...

  3. POJ 3041 Asteroids 二分图之最大匹配

    题意:在一个网格中有若干个点,每一次可以清除一行或者一列,问最少几次可以将网格中的点全部清除. 思路:这个题是一个入门的最大匹配题(这个好像不是思路..).一般的方式就是将 行 看作集合A,列 看作集 ...

  4. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  5. [板子]ISAP

    ISAP求最大流,敲了一发板子,无压行,教程略去.转载请随意. #include <cstdio> #include <cstring> #include <algori ...

  6. [板子]倍增LCA

    倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...

  7. OpenCASCADE Root-Finding Algorithm

    OpenCASCADE Root-Finding Algorithm eryar@163.com Abstract. A root-finding algorithm is a numerical m ...

  8. codevs1022 覆盖[Hungary 二分图最大匹配]

    codevs1022 覆盖 有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积. 输入描述  ...

  9. XidianOJ 1097 焊板子的xry111

    题目描述 我们知道xry111不仅仅代码写的棒,硬件也不是一般人可以比拟的,比如他可以左手右手加上嘴里叼着一个烙铁一起工作,同时焊接三块板子!Orz,现在他的实验室知道他这么厉害了,准备让他焊接N块板 ...

随机推荐

  1. MysqlNDBcluster集群数据操作可能出现的问题

    Ndbcluster 版本7.5: 1.非ndbcluster引擎的表集群不会同步:若要同步,需要使engine=ndbcluster;如果表有外键约束需先删除外键,同步成功后再建立外键[否则会报错] ...

  2. codeforces 467B Fedor and New Game 解题报告

    题目链接:http://codeforces.com/contest/467/problem/B 题目意思:有 m + 1 个 player 和 n 种类型的 soldiers.每个player被赋予 ...

  3. ACM应该学什么(知乎学长)

    网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法,自己靠动脑筋能够实现的),这种题目特点是麻烦,但是不难, ...

  4. Java 高阶 —— 相等性比较

    1. 包装类 所有的相同类型的包装类对象之间的值的比较,全部使用 equals 方法: 对于 Integer a = ?,在 -128 到 127 范围内的赋值,Integer 对象是在 Intege ...

  5. 动态链接库的ELF头分析

    ELF(Executable and Linking Format)用于存储Linux程序. ELF文件分三种类型: 1.目标文件(通常是.o); 2.可执行文件(我们的运行文件)   3.动态库(. ...

  6. 在CentOs6.x 安装Cx_oracle5.x

    Setting up anything Oracle related is a huge pain. After hunting the web for info with minimal succe ...

  7. ip策略路由

    ip route 只是基于目的地址的路由选择 ip rule 路由策略,控制路由选择,可根据源地址,源IP等进行路由选择   路由策略由选择符合操作组成 ip rule add   添加策略 ip r ...

  8. linux下实现目录即文件的完整删除

    功能: 1.删除目录 2.删除文件 3.删除不为空的目录即下属文件 #ifndef _DELETE_FILE #define _DELETE_FILE #include <sys/stat.h& ...

  9. 【linux+C】神器 vim + 指针相关客串

    前篇回顾 上篇介绍了linux下C编程基本环境配置以及相关工具使用选择. 不过10个大牛9个用vim,那么咱们就来玩vim.linux下玩c就别依靠图形界面.好吧告别Ide,命令行才是c的王道. 本篇 ...

  10. Hibernate的session.createSQLQuery的几种查询方式

    当我们用HQL进行子查询的时候,如select * from Tree where pid in (select id from Tree,此时HIBERANTE就会报错,说什么*号错误之类的.但如果 ...