打地鼠
【问题描述】
小A喜欢打地鼠!
一共有n只地鼠按照顺序出现,第i只地鼠的肥胖度为a[i]。每次⼩A可以打地
鼠,但是要保证之前没打过任何地鼠,或这只地鼠⽐之前的任何一只小A打过的地鼠都要肥。
当然题目没有这么简单。如果⼩A没有打完所有地鼠,那么剩下的地鼠将会再
次出现(来被小A打)。当然,地鼠不是傻⼦,如果自⼰出现了t次以后还没被打
死,那么就不会再出现了。
现在问,⼩A最多能打多少地鼠?
【输入文件】
输入文件为dishu.in。
第⼀⾏包含4个整数k n max t。分别表示数据组数,地鼠个数,a[i]的最大值,
每个地鼠出现的最大次数。
接下来k⾏,每⾏表示⼀组数据,包含n个整数,代表a[1]到a[n]。
【输出文件】
输出文件为dishu.out。
对于每组数据输出小A最多能打到的地鼠个数。
【输入样例】
3 3 5 2
3 2 1
1 2 3
2 3 1
【输出样例】
2
3
3
【数据规模和约定】
对于30%的数据,n*t≤1,000。
对于60%的数据,n*t≤100,000。
对于80%的数据,n*max≤100,000。
对于100%的数据,1≤k≤10,1≤n,max≤10^5,1≤t≤10^9,n*max≤20,000,000。

Solution
先澄清一下题意:即使下一轮地鼠们又一次走过。也必须打比上轮打过的最肥的老鼠还要肥的才行 。简单的来说,每一个数据中,maxn 是不会因为打第k次而变成0的。
只能打T次。
相当于地鼠们排好队从你面前走过了T次
那么相当于,原本长度为N的队列现在循环成了长度与T*N的队列。
必须要打的最多。
思路很清晰。
最长上升序列。

问:怎么在下一次队列循环中处理前面已经打过的老鼠。
答:不用管!
原因:在LIS 队列中 ,只又F【i】>F【i-1】时才会对答案有贡献,
所以
譬如
1 3 2 4 5, 1 3 2 4 5, 1 3 2 4 5 的序列中 F[i] 为
我们发现 ,,在后面出现的重复的元素,是不会对LIS的
d【i】数组 (即最长上升长度为i,且结尾最小的元素) 做出任何贡献的。
换一种方式说。
最长上升序列中不会出现重复的元素。
所以其实不处理重复的元素。

贴一下代码
(我的LIS他们都说好奇怪,我也这么觉得)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstdlib>
#define M (1000005)
#define LL long long
using namespace std;
int n,s[M],d[M],cnt,f[M],k,maxn,t,vis[M],Maxn,return_flag;
void test(int t)
{for (int i=1;i<=n*t;i++)cout<<s[(i-1)%n+1]<<' ';cout<<endl;
}
int LIS(int t)
{maxn=0;cnt=0;memset(d,0,sizeof(d));memset(f,0,sizeof(f));for (int i=1;i<=n*t;i++){int ni=(i-1)%n+1;if(s[ni]>d[cnt]){d[++cnt]=s[ni];f[ni]=cnt;maxn=max(maxn,f[ni]);if(maxn==return_flag) return maxn;}else{   int k=lower_bound(d+1,d+cnt+1,s[ni])-d;f[ni]=k;d[k]=s[ni];maxn=max(maxn,f[ni]);if(maxn==return_flag) return maxn;}         }return maxn;
}
int main()
{freopen("dishu.in","r",stdin);freopen("dishu.out","w",stdout);cin>>k>>n>>Maxn>>t;return_flag=min(Maxn,n);while(k--){int ans=0;for (int i=1;i<=n;i++)scanf("%d",&s[i]);ans=LIS(t);printf("%d\n",ans);}return 0;
}

【LIS】【打地鼠】相关推荐

  1. 【58测试】【贪心】【离散】【搜索】【LIS】【dp】

    第一题 大天使之剑 大意: 有n个怪,每个怪的ph 为 h[i],有三种攻击方式,普通攻击:一次打一个怪一滴血:重击(消耗1魔法值):一次打一个怪两滴血:群体攻击(消耗1魔法值):一次打所有怪一滴血. ...

  2. UVa 10051 Tower of Cubes(类似LIS)

    题意: 一些重量递增而且各个面都有颜色的立方体,要将这些立方体堆成一个塔,要求两个接触面同色,而且下面的立方体更重.求塔的最大高度. 思路: 用求LIS的思想,无非是多了几个状态.dp[i][j]表示 ...

  3. 1045 Favorite Color Stripe(LIS解法)

    解题思路 本题属于Longest Increasing Sequence最长不下降子序列,但是要注意,LIS当中不会有无效的元素,而本题是有的,所以先要把无效元素过滤掉,才能转化成为LIS问题. 这里 ...

  4. LIS ZOJ - 4028

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4028 memset超时 这题竟然是一个差分约束 好吧呢 对于每一个a[i] ...

  5. 【hdu】4521 小明序列【LIS变种】【间隔至少为d】

    题目链接:https://vjudge.net/contest/228455#problem/B 转载于:https://blog.csdn.net/a709743744/article/detail ...

  6. HDU 1257 - 最少拦截系统 ( LIS / 贪心 )

    题目 现在有一种拦截系统,第一发拦截可以是任意高度,但是之后的拦截高度不能比上次高.为了拦截下所有的炮弹,最少需要准备几套拦截系统? 思路 可能是语文没学好吧,一开始被题意卡了一下.(而且题目连数据范 ...

  7. HDU 4540 威威猫系列故事――打地鼠(DP)

    D - 威威猫系列故事――打地鼠 Time Limit:100MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  8. linux qt5.7下打地鼠源程序,基于QT的打地鼠游戏

    [实例简介] 基于QT的一个打地鼠游戏,采用随机数的方法,是地鼠产生随机序列,有得分界面,动画效果也不错,用C++进行编程 [实例截图] [核心代码] 打地鼠 └── 打地鼠 ├── erwei │  ...

  9. 选点(dfs序+LIS)

    题意: 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi.现在要选出尽量多的点. 对于任意一棵子树,都要满足: 如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大: 如果在左子树选 ...

最新文章

  1. Console-算法[for]-打印出杨辉三角形
  2. PHP(二)——HTML基础
  3. Android之解决java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has text relocations
  4. [vue] 说说你对vue的extend(构造器)的理解,它主要是用来做什么的?
  5. linux 测试cpu计算圆周率_Linux下测试CPU性能
  6. 标题在图表上_图与表,让你的图表更简单清晰易读,告诉你怎么设置图表
  7. 数据挖掘项目实战—Kaggle入门竞赛:房价预测之EDA与特征工程
  8. php999换算人民币计算器,将cm换算为px (厘米换算为像素)
  9. IBM AIX初级培训总结
  10. java 输入一个时间,获取当前周的周一以及周五时间【自然周】
  11. 关于移动H3_2s光猫获得超级密码的步骤以及上传本地配置文件覆盖光猫的配置文件的方法
  12. 常见的图片比例有哪些?App中不同图片比例适用场景
  13. 【时间之外】面向监狱的编程?该学学网络安全法了(3)
  14. cad怎么画立体图形教学_CAD怎么画立体图,手把手教你画三维图形
  15. 记一次在android使用fdisk
  16. mos管的rc吸收电路计算_RC吸收电路
  17. Mac最好用的截图软件Xnip
  18. 堡垒机的作用与选型经验
  19. unity进行发布html,unity发布网页版(内嵌网页)
  20. 终于知道为什么片子太多会导致硬盘变慢了

热门文章

  1. Unity 3D-- 摄像机Clear Flags和Culling Mask属性用途详解
  2. OA行业分析:实施政务OA办公系统的好处
  3. Ant是什么东西(初级)
  4. MATLAB 2020a中文版安装步骤(简洁版)
  5. JavaScript-点击复制内容
  6. 《“雕刻”--“雕塑”系统操作设计》
  7. 记录我看的密码学方案中的技术,Shamir秘密共享,Schnorr零知识证明,EIGamal密码体制
  8. python计算差商_Python实现牛顿插值法(差商表)
  9. 免费的图书管图书借阅管理系统
  10. 计算机考研专硕好考还是学硕好考,考研是学硕难考还是专硕难考?很多人都猜错了...