题目链接:Codeforces Round #433(Div. 2) D. Jury Meeting

题意:

有n个城市,每个城市有一个人,现在要让这些人来0号城市在一起k天,然后回去。

现在有m个日程表,每个日程表有出发时间,出发城市,到达城市(出发城市和到达城市其中一个为0),价钱。

现在让你安排一个日程,使得用的总的钱最少。

题解:

对于每个城市的日程表去组合显然复杂度太大。

考虑双指针的思想。在一起k天,就相当于要对每个城市找一个左端点和右端点,构成一条线段,然后n个城市构成n条线段,使得这n条线段的重叠部分大于等于k。

那么我们考虑枚举每个k的起点L,显然在L左边,每个城市都要有左端点才行,对于每个城市如果有多个左端点,显然取最便宜的那个。

右端点同理。

然后就可以先预处理出:截止第i天,n个城市的人全部到达0号城市的最小花费,和全部回去的最小花费。

然后扫一遍更新一下答案就行了。

 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;++i)
 3 using namespace std;
 4 typedef long long ll;
 5
 6 const int N=1e5+7;
 7 const ll inf=1ll<<61;
 8 int n,m,k;
 9 ll dp[N*10][2],val[N];
10 struct Node
11 {
12     int day,op,aim,cost;
13     Node(int a=0,int b=0,int c=0,int d=0):day(a),op(b),aim(c),cost(d){}
14     bool operator<(const Node &B)const{return day<B.day;}
15 }a[N];
16
17 int main(){
18     scanf("%d%d%d",&n,&m,&k);
19     F(i,1,m)
20     {
21         int aa,b,c,d;
22         scanf("%d%d%d%d",&aa,&b,&c,&d);
23         if(c==0)a[i]=Node(aa,0,b,d);
24         else a[i]=Node(aa,1,c,d);
25     }
26     sort(a+1,a+1+m);
27     F(i,1,n)val[i]=inf;
28     int ed=1,cnt=0;ll sum=0;
29     F(i,1,1000000)
30     {
31         while(ed<=m&&i>=a[ed].day)
32         {
33             if(a[ed].op){ed++;continue;}
34             if(val[a[ed].aim]==inf)
35             {
36                 cnt++,val[a[ed].aim]=a[ed].cost;
37                 sum+=a[ed].cost;
38             }
39             else if(val[a[ed].aim]>a[ed].cost)
40             {
41                 sum+=a[ed].cost-val[a[ed].aim];
42                 val[a[ed].aim]=a[ed].cost;
43             }
44             ed++;
45         }
46         if(cnt==n)dp[i][0]=sum;
47         else dp[i][0]=inf;
48     }
49     ed=m,cnt=0,sum=0;
50     F(i,1,n)val[i]=inf;
51     for(int i=1000000;i>=1;i--)
52     {
53         while(ed>=1&&i<=a[ed].day)
54         {
55             if(!a[ed].op){ed--;continue;}
56             if(val[a[ed].aim]==inf)
57             {
58                 cnt++,val[a[ed].aim]=a[ed].cost;
59                 sum+=a[ed].cost;
60             }
61             else if(val[a[ed].aim]>a[ed].cost)
62             {
63                 sum+=a[ed].cost-val[a[ed].aim];
64                 val[a[ed].aim]=a[ed].cost;
65             }
66             ed--;
67         }
68         if(cnt==n)dp[i][1]=sum;
69         else dp[i][1]=inf;
70     }
71     ll ans=inf;
72     F(i,1,1000000)
73     {
74         if(i+k+1>1000000)continue;
75         ans=min(ans,dp[i][0]+dp[i+k+1][1]);
76     }
77     printf("%lld\n",ans==inf?-1:ans);
78     return 0;
79 }

View Code

转载于:https://www.cnblogs.com/bin-gege/p/7489125.html

Codeforces Round #433(Div. 2) D. Jury Meeting(贪心)相关推荐

  1. Codeforces Round #656 (Div. 3) F. Removing Leaves 贪心 + 模拟

    传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个贪心策略就是每次都找一个叶子节点最多的点,让后删掉他的kkk个叶子节点,现在我们就来考虑如何模拟这个过程. 我们整一个vector<s ...

  2. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)

    A. Fraction 题目链接:http://codeforces.com/contest/854/problem/A 题目意思:给出一个数n,求两个数a+b=n,且a/b不可约分,如果存在多组满足 ...

  3. Codeforces Round #180 (Div. 2) A. Snow Footprints 贪心

    A. Snow Footprints 题目连接: http://www.codeforces.com/contest/298/problem/A Description There is a stra ...

  4. Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)

    F. Strange Housing 题意 有 nnn 个点和 mmm 条边,对点进行染色.要求一条边的两个点不能都染色,并且删除两端都没有染色的边之后,图连通.请给出一种染色方案. 题解 暴力贪心即 ...

  5. Codeforces Round #382 (Div. 2)C. Tennis Championship(贪心) D.巴赫猜想

    C: 题意:每个人输了比赛就会被淘汰,每两个人可以打比赛的要求是a赢过x场比赛b赢过y场比赛则当abs(x - y) <= 1 时他们可以进行比赛,总共n个选手,问最终的赢家可能赢过的场次的最大 ...

  6. Codeforces Round #683 (Div. 2) C. Knapsack(贪心)

    题目链接:https://codeforc.es/contest/1447/problem/C You have a knapsack with the capacity of W. There ar ...

  7. Codeforces Round #277 (Div. 2) C. Palindrome Transformations 贪心

    思路:只需处理字符串的一半,即:根据右半段来修改左半段.因为同时修改对称的两个字符,所需的操作数与修改一个字符是相等的.为了使操作数最小,应该按顺序来修改. 由于对称性,可将pos > mid的 ...

  8. Codeforces Round #523 (Div. 2)B. Views Matter(贪心)

    传送门 题意:有一堆块,第i块的高度是ai,有一个从上面看到的俯视图,有一个从右面看到的侧视图,现在问从原来的堆中至多取出多少个块保持俯视图和侧视图不变,有两个规定是这样的,第一个就是物块不受重力影响 ...

  9. Codeforces Round #604 (Div.2)

    Codeforces Round #604 (Div.2) 2019/12/5 22:35--2019/12/6 00:35 Codeforces Round #604 (Div.2) A. Beau ...

最新文章

  1. OpenLDAP自定义属性的启用
  2. springboot开启jms服务监控jvm运行情况
  3. sql 取汉字首字母
  4. 和朱晔一起复习Java并发(五):并发容器和同步器
  5. 如何让pm2支持es6
  6. 程序员的浪漫:教你如何用MATLAB向女生表白
  7. HDOJ--2035--人见人爱A^B
  8. ajax 跨域 java_java+jQueryd的ajax跨域方法
  9. ubuntu13.10 归档管理器解压zip文件中文乱码问题的解决(亲测成功)
  10. php可视化网页制作软件,PHPRunner(PHP网页制作)官方版
  11. 4万字长篇,详解平安集团全生态布局及大数据业务应用研究
  12. 拉格朗日插值公式与mathematica程序实现
  13. (PhotoShop)如何用PS给证件照换底色(目前换底最成功的一个教程)
  14. 物联网终端有哪些应用
  15. SAP用户研讨会嘉宾发言稿——SAP中国产品技术平台咨询经理丁晓枫
  16. 阿里云-云开发平台存储篇——给应用接上后端存储能力
  17. Lsky Pro+云服务器搭建私人图床
  18. 看片显示服务器不稳定,无限“看片”,资源随便下,这回爽了!
  19. 超分辨率(SRCNN)练习
  20. 部署 Office Web Apps(2)

热门文章

  1. 数据安全防护之打造安全.mdb数据库
  2. Redis允许远程访问
  3. window7 ubuntu12.04 Opensuse13.04 三系统安装
  4. 为什么 Kubernetes 变得如此流行(2020版)
  5. 卧底各大程序员圈,才知道什么才是牛逼的程序员!
  6. 树莓派上利用 Tensorflow 实现小车的自动驾驶
  7. spring boot实战(第九篇)Application创建源码分析
  8. RESTful Web 服务 - 无状态
  9. Python 海龟画图(turtle)常用的颜色单词
  10. Java 洛谷 P1308 统计单词数