ZOJ-3941 Kpop Music Party

本文解析了ZOJ-3941题目,该问题涉及音乐会参与和兴奋状态持续天数的最大化。通过分析音乐会的时间安排及参与者的选择策略,采用DFS搜索算法确定最优解。

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 }

 

转载于:https://www.cnblogs.com/MingSD/p/8456946.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值