luoguP2439教室利用(贪心,排序,dp)
2017-03-04 20:49
267 查看
题目大意:
读入所有演讲的起始和终止时间;
计算最大的可能演讲总时间
我们假设在某一演讲结束的瞬间我们就可以立即开始另一个演讲。
#include<iostream>
#include<algorithm>
using namespace std;
struct data{
int x;
int y;
}a[5010];
int f[5010]={0};
int cmp(data a,data b){
if (a.x<b.x) return 1;
if (a.x>b.x) return 0;
if (a.y<b.y) return 1;
return 0;
}
int main(){
int n;
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
sort(a+1,a+1+n,cmp);
f[1]=a[1].y-a[1].x;
for (int i=2;i<=n;i++){
for (int j=1;j<i;j++)
if (a[j].y<=a[i].x) f[i]=max(f[i],f[j]); //dp
f[i]+=a[i].y-a[i].x;
}
int ans=0;
for (int i=1;i<=n;i++) ans=max(ans,f[i]);
cout<<ans;
}
读入所有演讲的起始和终止时间;
计算最大的可能演讲总时间
我们假设在某一演讲结束的瞬间我们就可以立即开始另一个演讲。
#include<iostream>
#include<algorithm>
using namespace std;
struct data{
int x;
int y;
}a[5010];
int f[5010]={0};
int cmp(data a,data b){
if (a.x<b.x) return 1;
if (a.x>b.x) return 0;
if (a.y<b.y) return 1;
return 0;
}
int main(){
int n;
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
sort(a+1,a+1+n,cmp);
f[1]=a[1].y-a[1].x;
for (int i=2;i<=n;i++){
for (int j=1;j<i;j++)
if (a[j].y<=a[i].x) f[i]=max(f[i],f[j]); //dp
f[i]+=a[i].y-a[i].x;
}
int ans=0;
for (int i=1;i<=n;i++) ans=max(ans,f[i]);
cout<<ans;
}
相关文章推荐
- NOIP模拟题 River Path Word[排序][贪心][DP]
- [贪心 DP] 51Nod 1241 特殊的排序
- 巧妙地利用STL map set pair 贪心+排序 Codeforces Round #331 (Div. 2)C. Wilbur and Points
- 洛谷 1654 产品排序(sort) 背包DP+贪心
- 洛谷P1654 产品排序:贪心+DP
- 【HDU5188 BestCoder Round 33C】【贪心排序+DP】zhx and contest 考试不被怀疑作弊条件下达到至少m分的最少时间
- 利用比较器接口实现类排序
- 利用数组名作为函数参数传递排序和用指针进行排序
- 利用Dataview实现搜索指定目录下的所有文件,以指定的条件排序(可以按文件名升降序,最后修改时间升降序)
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 利用“指针”对主调函数中数组进行排序,(菜鸟知道模块化)
- 利用排序规则特点计算汉字笔划和取得拼音首字母
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 挑战30天C++入门极限-C/C++中利用数组名/指针进行排序实例
- 利用集合进行数组的排序
- 利用sql2005的新特性实现根据子表条件得到的主表键且按其排序取出对应主表记录的方法
- 利用树型结构进行排序 选择自 0210 的 Blog
- [MSDN]如何利用qsort对CArray的继承类进行排序
- 利用堆栈方式对grid进行行排序的具体操作
- [MSDN]如何利用qsort对CArray的继承类进行排序