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

题意:

给出n个区间,求选k个区间的最大区间并。

思路:

可能存在左端点相同的多个区间,那么此时我们肯定选右端点最大的那个区间。现在将区间按左端点排序,d[i][j]表示在1~i坐标轴范围内选择j个区间的最大区间并。

状态转移方程如下:

dp[i+1][j] = max(dp[i][j],dp[i+1][j]);      //不选的话就和上一个一样
dp[i+num][j+1] = max(dp[i][j]+num,dp[i+num][j+1]);  //选择

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 const int maxn = 2000+5;
 8
 9 int n,m,k;
10 int dp[maxn][maxn];
11
12 struct node
13 {
14     int l,r;
15     bool operator< (const node& rhs) const
16     {
17         return l<rhs.l;
18     }
19 }s[maxn];
20
21 int main()
22 {
23     //freopen("in.txt","r",stdin);
24     int T;
25     int kase = 0;
26     scanf("%d",&T);
27     while(T--)
28     {
29         scanf("%d%d%d",&n,&m,&k);
30         for(int i=1;i<=m;i++)
31             scanf("%d%d",&s[i].l,&s[i].r);
32         memset(dp,0,sizeof(dp));
33         sort(s+1,s+m+1);
34         int pos = 1, num = 0;
35         for(int i=0;i<n;i++)
36         {
37             while(pos<=m && s[pos].l==i+1)
38             {
39                 num = max(num, s[pos].r - s[pos].l + 1);
40                 pos++;
41             }
42
43             for(int j=0;j<=k;j++)
44             {
45                 dp[i+1][j] = max(dp[i][j],dp[i+1][j]);
46                 dp[i+num][j+1] = max(dp[i][j]+num,dp[i+num][j+1]);
47             }
48             if(num)   num--;  //因为左端点右移了一位,所以这里需要
49         }
50         printf("Case #%d: ",++kase);
51         printf("%d\n",dp[n][k]);
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/zyb993963526/p/8120240.html

HDU 6249 Alice’s Stamps(dp)相关推荐

  1. HDU 2639 Bone Collector II (dp)

    题目链接 Problem Description The title of this problem is familiar,isn't it?yeah,if you had took part in ...

  2. HDU 4562 守护雅典娜(dp)

    守护雅典娜 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  3. HDU 6446 Tree and Permutation (dp)

    题意:给出一颗树,按节点进行全排列,给你一棵树,以全排列的第一个树为根节点,求出根节点到其他点的最短路径之和,把这些和在相加,求最后结果 分析:对于每一条边都经过了 2*(n-1)!次,用dp算出这棵 ...

  4. USACO / Stamps(DP)

    描述 已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 例如,假设有 1 分和 3 分的邮票:你 ...

  5. 【HDU - 2089 】不要62 (dp)

    题干: 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).  杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客 ...

  6. HDU 5230 ZCC loves hacking(DP)

    Problem Description Now, a Codefires round is coming to end. ZCC has got C(0≤C≤106) points by solvin ...

  7. *【HDU - 5707】Combine String(dp)

    题干: Given three strings aa, bb and cc, your mission is to check whether cc is the combine string of  ...

  8. HDU 4111 Alice and Bob (博弈)11年成都现场赛

    转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 可惜没有机会去现场做,不过当时肯定 ...

  9. hdu 1257 最少拦截系统 (DP)

    点击打开链接 #include"stdio.h" int main() {int a[10011],b[10011];int i,j,c,n;while(scanf("% ...

最新文章

  1. python生成时间戳_python生成13位或16位时间戳以及反向解析时间戳的实例
  2. LibreOffice 3.6.6 修复了 50 个 Bug
  3. 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...
  4. spring系列-注解驱动原理及源码-bean组件注册
  5. servlet——web应用中路径问题
  6. windows PHP Cli模式下配置
  7. 修复./mysql/proc
  8. 5.MongoDB索引
  9. servlet 规范_Tomcat原理解析(壹)— Servlet
  10. 这是我用Microsoft Word 2010 直接发布的测试用博客
  11. Column name pattern can not be NULL or empty.
  12. Mybatis 单独项目
  13. HDU6064 Besttheorem
  14. Hadoop AWS Word Count 样例
  15. 计算机主板时钟,电脑主板时钟电路工作原理
  16. 洛谷P3332 K大数查询
  17. mysql with,mysql+with
  18. 单片机P0口的AD0-7是什么意思
  19. 美国国家标准与技术研究院(NIST)
  20. angular基础创建组件报错Is it missing an @NgModule annotation

热门文章

  1. break与continue的的用法以及区别
  2. [Qt教程] 第16篇 2D绘图(六)坐标系统
  3. php的工作流程是什么,工作流程 · PHP-ML中文文档 · 看云
  4. 求杨辉三角的前n行数据_LeetCode算法第118题:杨辉三角
  5. python如何模拟键盘输入_python实现键盘输入的实操方法
  6. 【汇编语言(第3版)王爽】第八章学习内容
  7. 每天一道LeetCode-----计算直方图中最大矩形的面积
  8. 锐浪报表 多条数据集合到一个二维码中_【小麦课堂】快速查询明细数据的操作...
  9. 我的世界1.13的服务器网站,我的世界1.13纯净版
  10. java中ftp删除文件,Java 实现ftp 文件上传、下载和删除