09 K Subsequence

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int INF = 0x3f3f3f3f;
  5.  
  6. ll mincost;
  7. int n, m, cnt, s, t, ts;
  8. struct node {
  9. int to, nex, val, cost;
  10. }E[4012005];
  11. int head[4005];
  12. int cur[4005];
  13.  
  14. void addedge(int u, int v, int va, int co) {
  15. E[++cnt].to = v; E[cnt].nex = head[u]; head[u] = cnt; E[cnt].val = va; E[cnt].cost = co;
  16. E[++cnt].to = u; E[cnt].nex = head[v]; head[v] = cnt; E[cnt].val = 0; E[cnt].cost = -co;
  17. }
  18.  
  19. struct no1 {
  20. int to, edge;
  21. }pre[4005];
  22.  
  23. int dis[4005];
  24. bool inque[4005];
  25. int que[4000005];
  26. bool spfa() {
  27. for(int i = 1; i <= t; i++) dis[i] = INF, inque[i] = 0, cur[i] = head[i];
  28. dis[s] = 0; inque[s] = 1;
  29. int top = 0;
  30. que[++top] = s;
  31.  
  32. while(top) {
  33. int u = que[top];
  34. top--;
  35. inque[u] = 0;
  36.  
  37. for(int i = head[u]; i; i = E[i].nex) {
  38. int v = E[i].to;
  39. if(E[i].val && dis[v] > dis[u] + 1LL * E[i].cost) {
  40. dis[v] = dis[u] + 1LL * E[i].cost;
  41. pre[v].to = u;
  42. pre[v].edge = i;
  43. if(!inque[v]) {
  44. inque[v] = 1;
  45. que[++top] = v;
  46. }
  47. }
  48. }
  49. }
  50. return dis[t] != INF;
  51. }
  52.  
  53. int ans, cos1;
  54. void EK() {
  55. ans = cos1 = 0;
  56.  
  57. while(spfa()) {
  58. int mi = INF;
  59. for(int i = t; i != s; i = pre[i].to) {
  60. mi = min(mi, E[pre[i].edge].val);
  61. }
  62. for(int i = t; i != s; i = pre[i].to) {
  63. E[pre[i].edge].val -= mi;
  64. E[pre[i].edge ^ 1].val += mi;
  65. }
  66. //for(int i = 1; i <= n; i++) h[i] += dis[i];
  67. ans += mi;
  68. cos1 += mi * dis[t];
  69. }
  70. }
  71.  
  72. /*
  73. ll h[4005];
  74. ll dis[4005];
  75. bool vvis[4005];
  76. bool dij() {
  77. for(int i = 1; i <= t; i++) dis[i] = INF, cur[i] = head[i], vvis[i] = 0;
  78. dis[s] = 0;
  79. priority_queue< pair<int, int> > que;
  80. que.push(make_pair(0, s));
  81.  
  82. while(!que.empty()) {
  83. int u = que.top().second;
  84. que.pop();
  85.  
  86. if(vvis[u]) continue;
  87. vvis[u] = 1;
  88.  
  89. for(int i = head[u]; i; i = E[i].nex) {
  90. int v = E[i].to;
  91. if(E[i].val && dis[v] + h[v] > dis[u] + 1LL * E[i].cost + h[u]) {
  92. dis[v] = dis[u] + 1LL * E[i].cost + h[u] - h[v];
  93. que.push(make_pair(-dis[v], v));
  94. }
  95. }
  96. }
  97. return dis[t] != INF;
  98. }*/
  99.  
  100. int q[2005];
  101. int main() {
  102. int T;
  103. scanf("%d", &T);
  104. while(T--) {
  105. scanf("%d%d", &n, &m);
  106. cnt = 1;
  107. memset(head, 0, sizeof(head));
  108. for(int i = 1; i <= n; i++) scanf("%d", &q[i]);
  109. s = n * 2 + 1;
  110. ts = s + 1;
  111. t = ts + 1;
  112. for(int i = 1; i <= n; i++) {
  113. for(int j = i + 1; j <= n; j++) {
  114. if(q[i] <= q[j]) addedge(i + n, j, 1, 0);
  115. }
  116. }
  117.  
  118. for(int i = 1; i <= n; i++) addedge(s, i, 1, 0), addedge(i + n, ts, 1, 0), addedge(i, i + n, 1, -q[i]);
  119. addedge(ts, t, m, 0);
  120.  
  121. EK();
  122. printf("%d\n", -cos1);
  123. }
  124. return 0;
  125. }
  126. /*
  127. 1
  128. 9 2
  129. 5 3 2 1 4 2 1 4 6
  130. */

K Subsequence

2019HDU多校 Round3的更多相关文章

  1. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

  2. HDU6579 2019HDU多校训练赛第一场1002 (线性基)

    HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...

  3. 2019HDU多校第一场1001 BLANK (DP)(HDU6578)

    2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...

  4. 2019HDU多校训练第三场 Planting Trees 暴力 + 单调队列优化

    题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少? 思路: ...

  5. 2017多校Round3(hdu6056~hdu6066)

    补题进度:7/11 1001 待填坑 1002 待填坑 1003(set) 题意: 给定长度为n(n<=5e5)的数组(是n的一个排列)和一个整数k(k<=80),f[l,r]定义为区间[ ...

  6. 2019HDU多校第九场 Rikka with Quicksort —— 数学推导&&分段打表

    题意 设 $$g_m(n)=\begin{cases}& g_m(i) = 0,     \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ...

  7. 2019HDU多校第7场——构造

    题意 假设现在你在准备考试,明天的考试有 $n$ 道题目,对于分值为 $i$ 的题目至少复习 $i+1$ 小时才能做对,已知总分为$m$,求确保完成 $k$ 道题的最少时间. 分析 手动尝试一下,发现 ...

  8. 2019HDU多校第六场1009 Three Investigators——杨表

    题意 给定一个 n 个元素的数列,从前 k 个元素中取5次不下降子序列,求取得的和的最大值(k从1至n) 分析 考虑将数字 a[i] 拆成 a[i] 个 a[i],比如 “4,1,2”→“4,4,4, ...

  9. 2019HDU多校第六场 6641 TDL——乱搞&&思维题

    题意 设 $f(n, m)$ 为大于 $n$ 且与 $n$ 互质的数中第 $m$ 小的数,求满足 $(f(n, m) - n) \oplus n = k$ 的最小正整数 $n$ 分析 因为 $m \l ...

随机推荐

  1. Laya 踩坑日记-人物模型穿模,模型显示不正常

    最近做游戏,人物要跑到很远的位置,z轴距离大概有20000个单位,然后就发现一个bug,到远处人物模型穿了,而且没办法改,这就尴尬了 Z轴对应值    0    100000 100000 当距离零点 ...

  2. 【Spring】Spring 入门

    Spring 入门 文章源码 Spring 概述 Spring Spring 是分层的 Java SE/EE 应用全栈式轻量级开源框架,以 IOC(Inverse Of Control,反转控制)和 ...

  3. LeetCode498 对角线遍历

    给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...

  4. LeetCode 二分查找模板 III

    模板 #3: int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; i ...

  5. 第一章计算机网络概述---OSI七层网络模型

    局域网和广域网 局域网的简写是LAN,广域网用WAL表示.其实家庭的网络就是一个小型的局域网,一个光猫,一根网线,但是光猫无线信号不太好的话,需要在搞一个路由器. 这时候你的电脑连接到路由器上,路由器 ...

  6. GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?

    目录 ✍前言 本文提纲 版本约定 ✍正文 GMT:格林威治时间 凭什么格林威治作为标准时间? 地球自转 中国有哪几个时区? 美国有哪几个时区? GMT和Http协议的渊源 UTC:世界标准时间 UTC ...

  7. 【Linux】系统打开文件最大数量限制(进程打开的最大文件句柄数设置)

    利用ulimit命令可以对资源的可用性进行控制. -H选项和-S选项分别表示对给定资源的硬限制(hard limit)和软限制(soft limit)进行设置. 硬限制(hard limit)一旦被设 ...

  8. python_mmdt:一种基于敏感哈希生成特征向量的python库(一)

    概述 python_mmdt是一种基于敏感哈希的特征向量生成工具.核心算法使用C实现,提高程序执行效率.同时使用python进行封装,方便研究人员使用. 本篇幅主要介绍涉及的相关基本内容与使用,相关内 ...

  9. 【中文】【deplearning.ai】【吴恩达课后作业目录】

    [目录][吴恩达课后作业目录] 吴恩达深度学习相关资源下载地址(蓝奏云) 课程 周数 名称 类型 语言 地址 课程1 - 神经网络和深度学习 第1周 深度学习简介 测验 中英 传送门 无编程作业 编程 ...

  10. Shell从入门到精通

    熟悉基本shell操作不仅是运维的基本功,对于开发来说也是多多益善,我在学习的过程中,总结了十个练手的小demo,并附上涉及的知识点,仅供娱乐. 1. 多线程ping监控,检查同一网段的IP是否连通 ...