[codevs1615]数据备份
2017-10-17 18:42
148 查看
题目←
大意:
可以转换成n条线段中选k条端点不重合的线段,要求线段之和最小
发现一条线段选了之后会影响两边的,考虑链表
还有这样一条替代关系:
选择一条长度为v的线段后,两旁的线段不能再选,但若要重选两条线段,可将答案增加lv+rv-v来抵消
其中lv、rv为左右线段的价值
综上,选择一条价值为v的线段时,在链表空间中新加入lv+rv-v,代替v的位置
然后继续从小到大贪心就可以了
大意:
可以转换成n条线段中选k条端点不重合的线段,要求线段之和最小
发现一条线段选了之后会影响两边的,考虑链表
还有这样一条替代关系:
选择一条长度为v的线段后,两旁的线段不能再选,但若要重选两条线段,可将答案增加lv+rv-v来抵消
其中lv、rv为左右线段的价值
综上,选择一条价值为v的线段时,在链表空间中新加入lv+rv-v,代替v的位置
然后继续从小到大贪心就可以了
#include<iostream> #include<cstdio> #include<algorithm> #include<queue> #define LL long long #define INF 1061109567 using namespace std; const int MAXN = 1000000 + 50; LL next[MAXN],pre[MAXN],A[MAXN],D[MAXN]; struct zt{ LL pos; LL cost,v; }l[MAXN]; bool operator < (zt a,zt b){ return a.v > b.v; } priority_queue <zt> q; LL n,m,k,cnt; int first; LL tot,ans,now; bool del[MAXN]; int main() { scanf("%lld%lld",&n,&m); scanf("%lld",&D[1]); for(int i = 2;i <= n;i ++){ scanf("%lld",&D[i]); A[++ cnt] = D[i] - D[i - 1]; } for(int i = 1;i <= cnt;i ++){ pre[i] = i - 1; next[i - 1] = i; q.push((zt){i,1,A[i]}); } pre[0] = -1; next[cnt] = cnt + 1; first = 0; A[0] = INF; A[cnt + 1] = INF; cnt ++; while(!q.empty()) { zt u = q.top(); q.pop(); if(del[u.pos])continue; tot += u.cost; now += u.v; if(tot == m){ ans = now; break; } u.v = -u.v; u.v += A[pre[u.pos]] + A[next[u.pos]]; A[++ cnt] = u.v; int tmp1 = pre[u.pos],tmp2 = next[u.pos]; next[pre[tmp1]] = cnt; pre[next[tmp2]] = cnt; pre[cnt] = pre[tmp1]; next[cnt] = next[tmp2]; del[tmp1] = del[tmp2] = del[u.pos] = true; u.pos = cnt; q.push(u); } printf("%lld",ans); }
相关文章推荐
- CodeVS1690 开关灯 解题报告【数据结构】【线段树】
- vscode设置备份
- VS Code 自用插件备份
- 【codevs1282】约瑟夫问题,卡数据ing?
- MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求
- VS code当前设置备份
- 【codevs 1615】数据备份
- CodeVs 1615 数据备份
- codevs 2610 活动选择(贪心)(测试数据有错)
- CodeVS1369 xth 砍树 解题报告【数据结构】【线段树/树状数组】
- Codevs1615数据备份
- asp.net MVC Code First模式在 vs 程序包管理器控制台执行的数据迁移更新语句
- 【codevs 1615】数据备份
- 备份恢复数据的三种方式
- code[VS]1205
- CodeVS-1669 (背包问题)
- MySQL数据故障时备份与恢复
- SQL技能天天练(2)---数据备份与还原
- BZOJ 1050 [HAOI2006]旅行comf CODEVS 1001 舒适的路线 并查集
- codevs 1009 产生数 题解报告