2019HDU多校 Round3
09 K Subsequence
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f; ll mincost;
int n, m, cnt, s, t, ts;
struct node {
int to, nex, val, cost;
}E[4012005];
int head[4005];
int cur[4005]; void addedge(int u, int v, int va, int co) {
E[++cnt].to = v; E[cnt].nex = head[u]; head[u] = cnt; E[cnt].val = va; E[cnt].cost = co;
E[++cnt].to = u; E[cnt].nex = head[v]; head[v] = cnt; E[cnt].val = 0; E[cnt].cost = -co;
} struct no1 {
int to, edge;
}pre[4005]; int dis[4005];
bool inque[4005];
int que[4000005];
bool spfa() {
for(int i = 1; i <= t; i++) dis[i] = INF, inque[i] = 0, cur[i] = head[i];
dis[s] = 0; inque[s] = 1;
int top = 0;
que[++top] = s; while(top) {
int u = que[top];
top--;
inque[u] = 0; for(int i = head[u]; i; i = E[i].nex) {
int v = E[i].to;
if(E[i].val && dis[v] > dis[u] + 1LL * E[i].cost) {
dis[v] = dis[u] + 1LL * E[i].cost;
pre[v].to = u;
pre[v].edge = i;
if(!inque[v]) {
inque[v] = 1;
que[++top] = v;
}
}
}
}
return dis[t] != INF;
} int ans, cos1;
void EK() {
ans = cos1 = 0; while(spfa()) {
int mi = INF;
for(int i = t; i != s; i = pre[i].to) {
mi = min(mi, E[pre[i].edge].val);
}
for(int i = t; i != s; i = pre[i].to) {
E[pre[i].edge].val -= mi;
E[pre[i].edge ^ 1].val += mi;
}
//for(int i = 1; i <= n; i++) h[i] += dis[i];
ans += mi;
cos1 += mi * dis[t];
}
} /*
ll h[4005];
ll dis[4005];
bool vvis[4005];
bool dij() {
for(int i = 1; i <= t; i++) dis[i] = INF, cur[i] = head[i], vvis[i] = 0;
dis[s] = 0;
priority_queue< pair<int, int> > que;
que.push(make_pair(0, s)); while(!que.empty()) {
int u = que.top().second;
que.pop(); if(vvis[u]) continue;
vvis[u] = 1; for(int i = head[u]; i; i = E[i].nex) {
int v = E[i].to;
if(E[i].val && dis[v] + h[v] > dis[u] + 1LL * E[i].cost + h[u]) {
dis[v] = dis[u] + 1LL * E[i].cost + h[u] - h[v];
que.push(make_pair(-dis[v], v));
}
}
}
return dis[t] != INF;
}*/ int q[2005];
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
cnt = 1;
memset(head, 0, sizeof(head));
for(int i = 1; i <= n; i++) scanf("%d", &q[i]);
s = n * 2 + 1;
ts = s + 1;
t = ts + 1;
for(int i = 1; i <= n; i++) {
for(int j = i + 1; j <= n; j++) {
if(q[i] <= q[j]) addedge(i + n, j, 1, 0);
}
} 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]);
addedge(ts, t, m, 0); EK();
printf("%d\n", -cos1);
}
return 0;
}
/*
1
9 2
5 3 2 1 4 2 1 4 6
*/
K Subsequence
2019HDU多校 Round3的更多相关文章
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...
- HDU6579 2019HDU多校训练赛第一场1002 (线性基)
HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...
- 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
2019HDU多校第一场1001 BLANK (DP) 题意:构造一个长度为n(n<=10)的序列,其中的值域为{0,1,2,3}存在m个限制条件,表示为 l r x意义为[L,R]区间里最多能 ...
- 2019HDU多校训练第三场 Planting Trees 暴力 + 单调队列优化
题意:有一个n * n的网格,每个网格中间有一颗树,你知道每棵树的高,你可以选择一个矩形区域把里面的树都围起来,但是矩形区域里面任意两棵树的高度差的绝对值不超过m,问这个矩形的最大面积是多少? 思路: ...
- 2017多校Round3(hdu6056~hdu6066)
补题进度:7/11 1001 待填坑 1002 待填坑 1003(set) 题意: 给定长度为n(n<=5e5)的数组(是n的一个排列)和一个整数k(k<=80),f[l,r]定义为区间[ ...
- 2019HDU多校第九场 Rikka with Quicksort —— 数学推导&&分段打表
题意 设 $$g_m(n)=\begin{cases}& g_m(i) = 0, \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ...
- 2019HDU多校第7场——构造
题意 假设现在你在准备考试,明天的考试有 $n$ 道题目,对于分值为 $i$ 的题目至少复习 $i+1$ 小时才能做对,已知总分为$m$,求确保完成 $k$ 道题的最少时间. 分析 手动尝试一下,发现 ...
- 2019HDU多校第六场1009 Three Investigators——杨表
题意 给定一个 n 个元素的数列,从前 k 个元素中取5次不下降子序列,求取得的和的最大值(k从1至n) 分析 考虑将数字 a[i] 拆成 a[i] 个 a[i],比如 “4,1,2”→“4,4,4, ...
- 2019HDU多校第六场 6641 TDL——乱搞&&思维题
题意 设 $f(n, m)$ 为大于 $n$ 且与 $n$ 互质的数中第 $m$ 小的数,求满足 $(f(n, m) - n) \oplus n = k$ 的最小正整数 $n$ 分析 因为 $m \l ...
随机推荐
- 【十天自制软渲染器】DAY 01:图形学学习建议与环境搭建
推荐直接阅读博客原文,更新更及时,阅读体验更佳 「十天自制软渲染器」这个标题我承认标题党了.在对图形学一无所知的情况下想十天自制一个软渲染器,就好似一节课没上过却试图一个晚上看完<30 天精通 ...
- 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...
- mysql中的kill
show processlist;查看id, 然后 kill id ; 就行了.
- Linux下Too many open files问题排查与解决
作者: Grey 原文地址: Github 语雀 博客园 Too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的 ...
- SAP 修改表和表中数据
平时修改表中数据的方式有一下几种: 1.一般就是通过SE11或者是SE16进去,找到那条记录,然后将模式变成EDIT,然后修改保存. 2.通过SQL语句在程序中实现数据库表的修改操作 3.通过SE16 ...
- centos7下 开启/关闭/查看firewall运行状态命令
1.开启防火墙:systemctl start firewalld.service [root@localhost bin]# systemctl start firewalld.service [r ...
- JD6621快速充电协议芯片,带有PPS 控制器的USB-PD3.0
描述 JD6621是高度集成的USB供电(PD)控制器,支持USB PD 3.0 ,该USB PD 3.0 具有针对USBType-C下游接口(源)设计的可编程电源(PPS)规范.它监视CC引脚以检测 ...
- Bagging和Boosting的介绍及对比
"团结就是力量"这句老话很好地表达了机器学习领域中强大「集成方法」的基本思想.总的来说,许多机器学习竞赛(包括 Kaggle)中最优秀的解决方案所采用的集成方法都建立在一个这样的假 ...
- 避免重复提交?分布式服务的幂等性设计! 架构文摘 今天 点击蓝色“架构文摘”关注我哟 加个“星标”,每天上午 09:25,干货推送! 来源:https://www.cnblogs.com/QG-whz/p/10372458.html 作者:melonstreet
避免重复提交?分布式服务的幂等性设计! 架构文摘 今天 点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 来源:h ...
- 小鹏汽车技术中台实践 :微服务篇 InfoQ 今天 以下文章来源于InfoQ Pro
小鹏汽车技术中台实践 :微服务篇 InfoQ 今天 以下文章来源于InfoQ Pro