阶梯教室设备利用"/>
[SDOI2005]阶梯教室设备利用
题目
思路
思路就是开30000个vector作为起始时间(就是不用排序),对于读入的东西(st,ed)将ed扔到st的那个vector里,然后就是一个很假的dp了,dp[i]表示在i时间结束的最大演讲时间,转移也很简单,就是要注意下dp[i]的初值是dp[i-1],因为可以某段时间不排演出
代码
#include<bits/stdc++.h>
using namespace std;
int n,dp[30010]={0},st,ed;
vector<int>mp[30010];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&st,&ed),mp[st].push_back(ed);for(int i=0;i<=30000;i++){if(i>1)dp[i]=max(dp[i],dp[i-1]);for(int j=0;j<mp[i].size();j++)dp[mp[i][j]]=max(dp[mp[i][j]],dp[i]+mp[i][j]-i);}cout<<dp[30000];
}
更多推荐
[SDOI2005]阶梯教室设备利用
发布评论