http://acm.hdu.edu.cn/showproblem.php?pid=4293

题意:

有n个人分成了若干组走在一条林荫道路上,导游为了能够确定人数,要求每个人喊出自己所在的队伍前边有多少人Ai表示,后边有多少人Bi表示,于是我们得到了n条信息。这里面有错误的信息也有正确的信息,要求我们尽量使正确信息最大求出正确信息的数量。

思路:

想了很久一直在捉摸它的最有子结构从何而来,怎样dp....今天下午虎哥给了点提示终于明白了如何做了。。。YM虎哥.....

首先我们根据每个人提供的前边Ai个人,后边Bi个人,可以确定这个人所在队伍的人数的范围。于是我们得到了N个区间,我只要求出不想交区间最多就好了。如果区间相交的话就不能确定该队伍了。还有就是要预处理区间相同也即在同一个队伍的人数不能超过区间的值。

View Code

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <string>#define CL(a,num) memset((a),(num),sizeof(a))
#define iabs(x)  ((x) > 0 ? (x) : -(x))
#define Min(a,b) (a) > (b)? (b):(a)
#define Max(a,b) (a) > (b)? (a):(b)#define ll __int64
#define inf 0x7f7f7f7f
#define MOD 100000007
#define lc l,m,rt<<1
#define rc m + 1,r,rt<<1|1
#define pi acos(-1.0)
#define test puts("<------------------->")
#define maxn 10000007
#define M 100007
#define N 507
using namespace std;
//freopen("din.txt","r",stdin);struct node{int l,r;int len;int num;
}seg[N];
int dp[N];
int n,length;int cmp(node a,node b){return a.l < b.l;
}
void insert(int l,int r){int i;for (i = 0; i < length; ++i){if (seg[i].l == l && seg[i].r == r){//如果已经存在并且还没有达到区间值就可添加if (seg[i].num < seg[i].len) seg[i].num++;break;}}if (i >= length){seg[length].l = l;seg[length].r = r;seg[length].len = r - l + 1;seg[length].num = 1;length++;}
}
bool isok(int i,int j){//printf("****%d %d %d %d\n",i,j,seg[i].r,seg[j].l);if (seg[i].l <= seg[j].r) return false;//判断区间是否相交else return true;
}
void solve(){int i,j;CL(dp,0);dp[0] = seg[0].num;//dp求值for (i = 1; i < length; ++i){for (j = 0; j < i; ++j){if (isok(i,j)){//puts("DDD");dp[i] = max(dp[i],dp[j] + seg[i].num);}}if (dp[i] == 0){dp[i] = seg[i].num;}}
}
int main(){//freopen("din.txt","r",stdin);int i;int Ai,Bi;while (~scanf("%d",&n)){length = 0;for (i = 0; i < n; ++i){scanf("%d%d",&Ai,&Bi);int R = n - Ai;int L = Bi + 1;if (L > R) continue;//这样的肯定不满足insert(L,R);//查看区间
        }sort(seg,seg + length,cmp);//for (i = 0; i < length; ++i) printf(">>>%d %d %d %d\n",seg[i].l,seg[i].r,seg[i].len,seg[i].num);
        solve();int MAX = -inf;for (i = 0; i < length; ++i){// printf(">>%d\n",dp[i]);MAX = max(MAX,dp[i]);}printf("%d\n",MAX);}return 0;
}

转载于:https://www.cnblogs.com/E-star/archive/2012/09/18/2691026.html

hdu 4293 Groups DP相关推荐

  1. HDU 4293 Groups (线性dp)

    OJ题目:click here~~ 题目分析:n个人分为若干组 , 每一个人描写叙述其所在的组前面的人数和后面的人数.求这n个描写叙述中,最多正确的个数. 设dp[ i ] 为前i个人的描写叙述中最多 ...

  2. Hdu 4293 DP

    题意: n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路: 如果已经知道了其中一组的人数~ ...

  3. hdu 1520 树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...

  4. hdu 4035 可能性DP 成都网络游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...

  5. HDU 2836 (离散化DP+区间优化)

    Reference:http://www.cnblogs.com/wuyiqi/archive/2012/03/28/2420916.html 题目链接: http://acm.hdu.edu.cn/ ...

  6. hdu 5568(dp+大数模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5568 官方题解: #include <cstdio> #include <cstri ...

  7. hdu 5464(简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5464 解题思路: 由于p很小,而ai很大,所以先把ai%p,由于ai可能有负数,所以ai=(ai%p+ ...

  8. hdu 5433(bfs+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5433 解题思路: dp[i][j][k]表示在(x,y)点,毅力为k时的最小体力.由于每个点可能会走多 ...

  9. HDU 2859 Phalanx (dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线) dp[i][j]表示i行j列元 ...

最新文章

  1. PHP7Grafika,PHP图片处理库Grafika详细教程(3):图像属性处理
  2. 用国内镜像源pip加速安装模块
  3. 在scrapy中parse函数里面xpath的内容打印不出来_Scrapy中 CrawlSpider 使用
  4. Skpi List跳表
  5. 《漫画算法》源码整理-5 排序算法
  6. CV之Image Caption:Image Caption算法的相关论文、设计思路、关键步骤相关配图之详细攻略
  7. CTF-杂项之工具使用汇总(一)
  8. MySQL+号的作用
  9. 【一起去大厂系列】深入理解MySQL中where 1 = 1的用处
  10. android 复制字符串,Cocos2dx 复制文本到剪切板(Android 和 ios)
  11. Android应用程序结构解析
  12. 软件测试基础知识(三)
  13. tmux 上滚_实践中的tmux:回滚缓冲区
  14. oracle number长度转换,Oracle Number型数值存储与转换的实现详解
  15. 未来 10 年,物联网将成为主流!
  16. php iis 手动安装教程,iis php安装教程【图文详解】_后端开发
  17. 计算机室nb代码,NB-iot SDK源码(Linux版)
  18. GB2312编码理解
  19. 串口通讯调试-串口调试助手
  20. Linux服务器开通443端口

热门文章

  1. c mysql二进制,MySQL运用connector C/C+读取二进制字段
  2. event php,PHP event 事件机制
  3. lgg6可以root的版本_Kali Linux 2020.1版本变更内容
  4. AAS的完整形式是什么?
  5. getcwd函数_PHP getcwd()函数与示例
  6. 贪心算法---背包问题(物品可以分割问题)
  7. C和汇编混合编程----printf
  8. linux 卸载sphinx,sphinx管理脚本,实现sphinx启动、关闭、重启、生成索引功能 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  9. 【剑指offer】_18 数据流中的中位数
  10. 套接字编程---2(TCP套接字编程的流程,TCP套接字编程中的接口函数,TCP套接字的实现,TCP套接字出现的问题,TCP套接字多进程版本,TCP套接字多线程版本)