这是BC上的题目,给你n个数a1, a2, ...., an. 这n个数的和为m(m<=2^22),要在里面取出尽可能多的数字(假设t个),组成新的序列b1, b2 ... bt.使得这个序列非递减,而且(b(i) - b(i-1))也是非递减的。求这个t的最大值。

题目没有告诉n的大小。我们先排序统计出大小不同的数字nn[], 和每个数字出现的次数mm[],可以算出不同的数字不会超过3000
dp[i][j] (j>=i) 表示以nn[i] 和nn[j]为所求序列的最末尾两个数字,这种情况下的序列的长度.
dp[i][i] = mm[i], dp[i][j] = max(dp[i][j], dp[k][i] + 1), (k<=i)
直接算的话复杂度O(n^3),不可取。我们可以发现上面的转移中随着j的增大k是随着减小的,可以优化到O(n^2).

<span style="font-size:14px;">#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
#define N 10000000
#define M 3000
int a[N],dp[M][M],s[M],num[M];
int n,m;
int main()
{int t;cin>>t;while(t--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);int tot=0;int x=1;a[n]=-1;for(int i=0;i<n;i++)if(a[i]!=a[i+1]){num[tot]=a[i];s[tot++]=x;x=1;}else x++;int ans=0;for(int i=0;i<tot;i++){dp[i][i]=s[i];int k=i;int ma=0;ans=max(dp[i][i],ans);for(int j=i+1;j<tot;j++){while((num[j]-num[i])>=(num[i]-num[k])&&k>=0){ma=max(ma,dp[k][i]);k--;}dp[i][j]=ma+1;ans=max(ans,dp[i][j]);}}printf("%d\n",ans);}return 0;
}
</span>

hdu-5064(dp)相关推荐

  1. HDU 5928 DP 凸包graham

    给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...

  2. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  3. HDU 4832(DP+计数问题)

    HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行.竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include < ...

  4. hdu 5086(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和. 解题思路:这道题直接枚举肯定不行 ...

  5. hdu 2059(dp)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  6. HDU 3646 DP + 二分

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...

  7. Hdu 4293 DP

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

  8. hdu 3905(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3905 思路:dp[i][j]表示前i分钟,睡了j分钟收获的的最大价值,并记tmp_dp[i][j]为从 ...

  9. hdu 4472 dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4472 第一直觉找规律,第二直觉 把树拆成子树,然后递推或者DP 然后发现不行,然后才发现自己题都没读,,,, d ...

  10. hdu 1003 dp

    确实十分经典的一题,但我是参照dicuss 的题目做的,真是惭愧啊, 希望可以多接触些dp类型的题,提高自己水平 格外注意 sum 的代表含义, #include<iostream> #i ...

最新文章

  1. 让GBDT和GNN结合起来:Criteo AI Lab提出全新架构BGNN
  2. 结构体和数组之间的映射关系
  3. SAX解析xml (遍历DOM树各节点)
  4. MusicXML 3.0 - DTD 速查
  5. 无水印pdf编辑器_偷偷告诉你如何编辑PDF文件,轻松解决这万恶的千古难题
  6. 洛谷 - P1217 [USACO1.5]回文质数 Prime Palindromes(欧拉线性筛+数论小知识)
  7. 微信小程序之坦克大战学习
  8. 针对WildFly和EAP运行Java Mission Control和Flight Recorder
  9. 注解返回html页面,【提问】ajax请求返回整个html页面
  10. 纳达尔复出迎澳网开门红 直落三盘横扫本土选手
  11. 特殊功能,实现方法!
  12. 生成指定范围的随机数_JAVA 获取随机数的方式以及应用案例
  13. IT草根的江湖之路之七: 挑战,刚刚开始
  14. 史上最全Java学习视频下载地址分享
  15. Missing artifact com.oracle:ojdbc7:jar:12.1.0.1. 配置maven.pom.xml,ojdbc.jar包出错
  16. Vue导出excel文件
  17. 【es6学习】Babel 转码器详解
  18. 经典游戏江湖医馆文字版
  19. Pytorch聊天机器人
  20. 径向基函数神经网络(RBFNN)

热门文章

  1. javamail QQ邮箱发验证码设定有效时间
  2. 为浏览器添加Bing搜索引擎
  3. 2019 AI顶会时间表
  4. pcap报文80211-8023区别
  5. 探讨广东技术师范大学Windows下MentoHUST上网认证
  6. 一键生成数据库表结构文档认准:screw工具(超级好用^_^)
  7. 一个页面崩溃,其他页面也跟着崩溃
  8. Latex 箭头上面写字母
  9. 高乐计算机课程,长春理工大学
  10. python bytes转str_Python3中bytes类型转换为str类型