NC216213. 华丽转身
描述
输入描述
第一行输入两个正整数 n,m ,分别表示考试的场数和参加考试的人数
接下来 n 行每行输入 3 个数 ,表示第 i 场考试可以控制的排名区间为 ,且若满足条件即可获得 份奖品( )
输出描述
输出仅一个数,表示最多获得的奖品份数。
示例1
输入:
4 5 1 5 1 1 2 1 3 4 1 1 2 1
输出:
2
说明:
样例说明:这里给出一种合法情况,四次考试排名分别为:4 2 3 1C++(clang++11) 解法, 执行用时: 95ms, 内存消耗: 6032K, 提交时间: 2021-02-03 21:15:30
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; int n;ll m; ll dp[N]; ll lft[N],rgt[N],num[N]; int main(){ int i,j; cin>>n>>m; for(i=1;i<=n;i++) cin>>lft[i]>>rgt[i]>>num[i]; for(i=2;i<=n;i++){ ll sum=0,last=0; for(j=i;j>=1;j--){ last=max(last*2,lft[j]); if(last>rgt[j]) break; dp[i]=max(dp[i],dp[j-1]+sum); sum+=num[j]; } } cout<<dp[n]; return 0; }