标签:数位 时间段 home 自己 tput namespace 简单 ios acm
众所周知神秘的 ACM 实验室有一个史诗级的出题狂魔,名曰 bLue。最近 bLue 又露出了邪恶的笑,原来是 bLue 接了为校赛出题的单子。
距离校赛开始还有 N 小时,由于各种奇怪的原因出题组可以出题的时间并不固定,大致可以分为M个时间段。每个时间段可以出的题目数也可能不同。同时由于出题是个煞费心血的事情,所以每个出题时间段结束后,善良的 bLue 会让大家休息 R (1 ≤ R ≤ N ) 小时,以便为接下来的出题事业继续奋斗。
为了能为校赛准备尽可能多的题目以备不时之需,bLue 需要好好地规划好这 N 小时如何安排,当然作为唯一的长者,bLue 一下子就为大家规划好了如何安排出题的时间段。
现在 bLue 想考考你在他完美的安排下出题组最多可以出多少个题目?
测试数据有多组,输入直到文件结束。
对于每组数据:
对于每组数据,输出出题组最多可以出的题的数目。
15 5 3 1 4 5 6 9 4 3 5 2 7 10 8 11 15 2
13
假设出题组在第 5 小时出完了一个时间段的题,他们需要休息 3 小时 (R = 3),那么他们在第 8 小时又可以继续开始出题了。
#include<iostream> #include<algorithm> using namespace std; typedef long long ll; struct node { int r,l,value; } mmp[10010]; ll dp[10010]; bool cmp(node a,node b) { if(a.r==b.r) return a.l < b.l; return a.r < b.r; } int main() { int n,m,R; while(cin >> n >> m >> R) { for(int i=0;i<m;i++) cin >> mmp[i].l >> mmp[i].r >> mmp[i].value; sort(mmp,mmp+m,cmp); dp[0] = mmp[0].value; ll ans = mmp[0].value; for(int i=1;i<m;i++) { ll maxn = 0; for(int j=0;j<i;j++) { if(mmp[j].r + R <= mmp[i].l)//判断时间是否符合要求能行 maxn = max(maxn,dp[j]); } dp[i] = maxn + mmp[i].value;//更新dp,注意如果时间不行maxn为0的,还是初始化状态,如果此时value大,那初始化状态更新 ans = max(dp[i],ans); } cout << ans << endl; } return 0; }
标签:数位 时间段 home 自己 tput namespace 简单 ios acm
原文地址:http://www.cnblogs.com/l609929321/p/6984619.html