ZOJ-3941 Kpop Music Party

Posted Schenker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ-3941 Kpop Music Party相关的知识,希望对你有一定的参考价值。

ZOJ-3941

题意:Edward想去参加音乐会,每次参加完音乐会只之后都会持续K天的兴奋(从今天到今天+K-1天), 现在共有n场音乐会, 每场音乐会都有一个开始时间和结束时间,并且他能选择其中的M天去参加, 现在求他能兴奋的总天数最多。

题解:如果他在第一段时间能用完所有的次数(有效利用的情况下),那么就算不把次数留到后面去他的总天数也是等效的,所以去除有效利用之后,再搜一下每一段的最后一天参不参加的状态就好了,一共10段,2^10也才1e3,接下来就是处理一下细节然后DFS搜索就好了。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define fi first
 5 #define se second
 6 #define lson l,m,rt<<1
 7 #define rson m+1,r,rt<<1|1
 8 #define max3(a,b,c) max(a,max(b,c))
 9 const int INF = 0x3f3f3f3f;
10 typedef pair<ll , ll> pll;
11 pll p[15];
12 ll N, K, M;
13 ll ans = 0;
14 void Dfs(int i, ll to, ll len, ll time)
15 {
16     if(time <= 0 || i == N+1)
17     {
18         ans = max(ans, len);
19         return ;
20     }
21     ll b = max(to, p[i].fi);
22     ll e = p[i].se;
23     if(b >= e)
24     {
25         Dfs(i+1, to, len, time);
26         if(e+K > to)
27         Dfs(i+1, e+K, len+(e+K-b), time-1);
28         return;
29     }
30     ll tt = ((e-b+1)%K == 0)? (e-b+1)/K : (e-b+1)/K+1;
31     if(tt > time) tt = time;
32     Dfs(i+1, b+tt*K, len+tt*K, time-tt);
33     if(tt+1 <= time)
34     Dfs(i+1, e+K, len+e-b+K, time-tt-1);
35 }
36 int main()
37 {
38     ios::sync_with_stdio(false);
39     cin.tie(0);
40     cout.tie(0);
41     int T;
42     while(cin >> T)
43     {
44         while(T--)
45         {
46             cin >> N >> K >> M;
47             ans = 0;
48             for(int i = 1; i <= N; i++)
49                 cin >> p[i].fi >> p[i].se;
50             sort(p+1, p+1+N);
51             Dfs(1,0,0,M);
52             cout << ans << endl;
53         }
54     }
55     return 0;
56 }

 

以上是关于ZOJ-3941 Kpop Music Party的主要内容,如果未能解决你的问题,请参考以下文章

名词模块_兴趣爱好

HDU 4173 Party Location(计算几何,枚举)

SCALA PARTY|复古也可以这么有腔调#OMNIA PARTY SPACE!

太阳女神Miss Ruby生日Party

party缩写是pa还是par

bzoj1037ZJOI2008生日聚会Party