bnuoj49098 神奇的身高
来源:互联网 发布:知乎pc客户端 编辑:程序博客网 时间:2024/06/11 23:44
有一群小伙伴站成一行,每个人的身高都是非负整数,但是他们站在一起并不和谐。需要将他们的身高变成严格单调递增的正整数序列才是和谐的。现在你有一种神奇的魔法,可以任意改变一个人的身高。现在问题来了,你最少需要改变多少人的身高才能使整个队伍和谐。(改变后的身高必须为整数)
这道题就是hdu5256的加强版。
http://blog.csdn.net/mymilkbottles/article/details/72235416
直接用hdu5256的套路是不行的。
因为这道题要求 需要将他们的身高变成严格单调递增的正整数序列才是和谐的。
比如
79 17 1 2 3 4 5
这组,使用hdu5652的程序得出的答案是2,因为只需要变成-1 -2 1 2 3 4 5就行了。
这道题是不能变成负数的,所以我们只能改变后边的5个数。
所以我们对b[i] (上面的链接题解中的)中负数去掉即可。
因为这些数都已经小于最理想的序列了,那么再怎么样都是要变化的。
#include<iostream>using namespace std;#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<stdlib.h>#include<vector>#include<queue>#include<deque>#include<map>#include<set>#include<time.h>#define pi(x,y) printf("%d%c",(x),(y));#define pin(x) printf("%d\n",(x));#define si(x) scanf("%d",&(x))#define sii(x,y) scanf("%d%d",&(x),&(y))#define s3(x,y,z) scanf("%d%d%d",&(x),&(y),&(z))#define rep(x,y,z) for(int (x)=(y);(x)<(z);++(x))#define dep(x,y,z) for(int (x)=(y)-1;(x)>=(z);--(x))#define read int TcaseN;scanf("%d",&TcaseN);for(int Tcase=1;Tcase<=TcaseN;++Tcase)#define cls(x,y) memset((x),(y),sizeof((x)));#define pb(x) push_back(x)#define mp(x,y) make_pair((x),(y))#define max3(value_a,value_b,value_c) max(max(value_a,value_b),value_c)#define min3(value_a,value_b,value_c) min(min(value_a,value_b),value_c)#define GT(x) (x)=clock();#define fin(x) freopen(x,"r",stdin);#define fout(x) freopen(x,"w",stdout);///In This You Can Define Long Integer Type#define LONGTYPE long longtypedef LONGTYPE LL;typedef unsigned LONGTYPE ULL;const int maxint=((~((unsigned)(0)))>>1);const LL maxll=((~((unsigned LONGTYPE)(0)))>>1);const int inf=0x3f3f3f3f;const double PI=acos(-1.0);const int N=100005;int a[N],b[N],dp[N],n;/**51 5 3 2 481 6 3 8 9 17 12 3171 2 3 5 5 5 661 3 9 5 6 779 17 0 1 2 3 455 5 5 5 5*/int LIS(){ int len=0; for(int i=1;i<=n;++i){ if(b[i]<0)continue; int pos=upper_bound(dp,dp+n,b[i])-dp; dp[pos]=b[i]; len=max(len,pos+1); } return n-len;}int main() {#ifdef tangge clock_t tSTART,tEND,t3; GT(tSTART);#endif // tangge /*Input:*/ while(scanf("%d",&n)==1){ dp[0]=inf; for(int i=1;i<=n;++i)scanf("%d",&a[i]),b[i]=a[i]-i,dp[i]=inf; printf("%d\n",LIS()); }#ifdef tangge GT(tEND); printf("%.8lf\n",(tEND-tSTART)/1000.0);#endif // tangge return 0;}
阅读全文
0 0
- bnuoj49098 神奇的身高
- BNUOJ49098 神奇的身高(LIS)
- BNUOJ49098 神奇的身高 - DP (LIS)
- BNU49098:神奇的身高
- 神奇的身高
- BNUOJ-49098-神奇的身高
- BNU 49098 神奇的身高
- BNU 49048 神奇的身高【思维+LIS】
- Codevs4246 奶牛的身高
- 4246 奶牛的身高
- 身高
- xbox360 计算身高的办法
- Codevs 4246 奶牛的身高
- [CODEVS P4246]奶牛的身高
- 输入一组身高在170到190之间(5个身高)比较身高差,选出身高差最小的两个身高,若身高差相同,选平均身高高的那两个身高,从小到达输出
- 男人的标准身高- -(转帖)
- 【转载】三国演义里将领的身高
- 促进身高的几种食物
- 解决ScrollView嵌套RecyclerView的冲突,非常简单,只需要3个步骤!
- (一)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解
- 关于Springboot + hibernate 使用websocket的详细代码
- oracle触发器使用
- Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别
- bnuoj49098 神奇的身高
- 逻辑回归(Logistic)
- Linux系统监控命令
- 旋转数组 二分查找 查找一个目标值
- 如何将你的 MySQL 查询速度提升 300 倍
- 记录遇到的面试题以及遇到的有意义的问题
- buildToolsVersion,platform-tools,com.android.support 作用
- 谈谈tomcat开机自启的简易教程
- linux 软连接 ln -s