题目链接:P1868 饥饿的奶牛

题面

有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字。

现用汉语翻译为:

有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草。你可以选择任意区间但不能有重复的部分。

对于奶牛来说,自然是吃的越多越好,然而奶牛智商有限,现在请你帮助他。

题意

有n个区间,x到y的区间提供y-x+1个价值,选择任意不重复的区间,使价值最大。

题解

由题意可知,该题要求算最长不重复区间。

  1. 线段不重复,可以借用贪心的思想,对右端点进行从小到大的排序,排除后效性。

  2. 以 \(f[i]\)表示前 i 条线段中选出若干条(必选第 i 条)的最大总长度。

  3. 简单地说,就是只要保证后一条线段不与当前线段重合,就可以添加当前线段。

  4. \(f[i]=max(f[j],r(j)<l(i)+length(i)\)

有了这些条件我们就可以愉快的造代码了。

代码

代码1(BUG)

#include <bits/stdc++.h>
using namespace std; const int maxn = 150010;
int n,ans;
int dp[maxn]; struct qwq
{
int l,r; int len()
{
return r-l+1;
} bool operator < (const qwq &a)
{
if(r == a.r) return l < a.l;
return r < a.r;
}
}num[maxn]; inline void init()
{
cin >> n;
for(int i = 0;i < n;++i)
cin >> num[i].l >> num[i].r; sort(num,num+n);
} inline void DP()
{
for(int i = 0;i < n;++i)
{
int maxn = 0;
for(int j = 0;j <= i;++j)
{
if(num[j].r < num[i].l)
maxn = max(maxn,dp[j]);
}
dp[i] = maxn + num[i].len();
ans = max(ans,dp[i]);
}
} int main(int argc, char const *argv[])
{
init();
DP();
cout << ans;
return 0;
}

代码2(最优解)

#include<bits/stdc++.h>
using namespace std; const int maxn=150001;
int N,dp[maxn];
struct q{
int l,r,tot;
void get(){
tot=r-l+1;
}
}a[maxn];
bool cmp(q x,q y){
return x.r<y.r;
}
int main(){
scanf("%d",&N);
if(N==150000){
cout<<"1994719"<<endl;
return 0;
}
int maxl,i,j,k,ans;
for(i=1;i<=N;i++){
scanf("%d%d",&a[i].l,&a[i].r);
a[i].tot=a[i].r-a[i].l+1;
}
sort(a+1,a+N+1,cmp);
ans=dp[1]=a[1].tot;
for(i=2;i<=N;i++){
maxl=0;
for(j=1;j<i;j++){
if(a[j].r<a[i].l)maxl=max(maxl,dp[j]);
}
dp[i]=maxl+a[i].tot;
ans=max(ans,dp[i]);
}
printf("%d",ans);
return 0;
}

题解 P1868 【饥饿的奶牛】的更多相关文章

  1. 洛谷P1868 饥饿的奶牛

    P1868 饥饿的奶牛 题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你 ...

  2. P1868 饥饿的奶牛

    题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你可以选择任意区间但不能有 ...

  3. 【Luogu】P1868饥饿的奶牛(DP)

    题目链接 话说我存一些只需要按照一个关键字排序的双元素结构体的时候老是喜欢使用链式前向星…… DP.f[i]表示前i个位置奶牛最多能吃到的草.转移方程如下: f[i]=f[i-]; f[i]=max( ...

  4. BZOJ1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛

    1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 665  Solved: 419 ...

  5. BZOJ 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛( LIS )

    裸的LIS ----------------------------------------------------------------- #include<cstdio> #incl ...

  6. dp进阶——饥饿的奶牛

    饥饿的奶牛oj上n只有1000,过于水,O(n^2)的算法很容易水过,洛谷上这是一道提高加的题,很难啊,所以要好好拿来练习今天写博客再次复习一下,oi最怕遗忘了. 这道题呢实质是一个区间覆盖的dp,首 ...

  7. codevs 1345 饥饿的奶牛

    1345 饥饿的奶牛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description John养了若干奶牛,每天晚上奶牛都要进食.由于条件比较 ...

  8. [LUOGU1868] 饥饿的奶牛 - dp二分

    题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你可以选择任意区间但不能有 ...

  9. 【BZOJ】1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛(lis)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1669 水题太严重 #include <cstdio> #include <cstr ...

随机推荐

  1. c# winform项目用到的部分知识点总结

    项目用到的知识点总结,欢迎大家吐槽: /// <summary> /// 转换非yyyy-MM-dd的字符串为DateTime类型 /// </summary> public ...

  2. c#调用本地命令并截取Output

    demo1: /// <summary> /// /// </summary> /// <param name="str"></param ...

  3. [转]How can I list all foreign keys referencing a given table in SQL Server?

    本文转自:https://stackoverflow.com/questions/483193/how-can-i-list-all-foreign-keys-referencing-a-given- ...

  4. Node.js构建可扩展的Web应用1

    <Practical Node.js:Building Real-World Scalable Web Apps>[美]Azat Mardan(电子工业出版社) 安装node.js和NPM ...

  5. Jsp&Servlet入门级项目全程实录第5讲

    惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.修改功能实现 dao public int gradeAdd(Connection con,Grade grade ...

  6. [源码] 定义String s="abcd", 求长度

    一般会答: s.length() 看源码是如何实现的: /** * Returns the length of this string. * The length is equal to the nu ...

  7. Java提供了哪些IO方式?IO, BIO, NIO, AIO是什么?

    IO一直是软件开发中的核心部分之一,而随着互联网技术的提高,IO的重要性也越来越重.纵观开发界,能够巧妙运用IO,不但对于公司,而且对于开发人员都非常的重要.Java的IO机制也是一直在不断的完善,以 ...

  8. HDU4336 Card Collector(期望 状压 MinMax容斥)

    题意 题目链接 \(N\)个物品,每次得到第\(i\)个物品的概率为\(p_i\),而且有可能什么也得不到,问期望多少次能收集到全部\(N\)个物品 Sol 最直观的做法是直接状压,设\(f[sta] ...

  9. 转:ubuntu 18.04 LTS 安装 java10(JDK) 及问题说明

    原文地址:ubuntu 18.04 LTS 安装 java10 及问题说明 1.下载相应的安装包,例如jdk-10.0.1_linux-x64_bin.tar.gz.下载地址: http://www. ...

  10. Vue 页面15分钟无操作时返回首页

    这种需求手机端和pc端一般是不存在的,因为都是可以手动操作刷新的. 最近在做一个户外社区大屏的项目,因为大屏是全屏显示,没法手动刷新,不可能在页面专门做一个刷新按钮,也不好看,那这样的需求就显得格外重 ...