hdu5248序列变换(二分+贪心)基础题
题意(中文的直接粘题意吧)
                                                                                      序列变换
Problem Description
给定序列A={A1,A2,...,An}, 要求改变序列A中的某些元素,形成一个严格单调的序列B(严格单调的定义为:Bi<Bi+1,1≤i<N)。
我们定义从序列A到序列B变换的代价为cost(A,B)=max(|Ai?Bi|)(1≤i≤N)。
请求出满足条件的最小代价。
注意,每个元素在变换前后都是整数。
 
Input
第一行为测试的组数T(1≤T≤10).
对于每一组:
第一行为序列A的长度N(1≤N≤105),第二行包含N个数,A1,A2,...,An.
序列A中的每个元素的值是正整数且不超过106。
 
Output
对于每一个测试样例,输出两行:
第一行输出:"Case #i:"。i代表第 i 组测试数据。
第二行输出一个正整数,代表满足条件的最小代价。
 
Sample Input
2
2
1 10
3
2 5 4
 
Sample Output
Case #1:
0
Case #2:
1
思路:
思路简单一下就能想到,二分当前答案,对于当前答案,从头开始贪心,能小就尽可能的小就行了。
#include<stdio.h>
#include<string.h>
int A[100005] ,B[100005];
int maxx(int x ,int y)
{
    return x > y ? x : y;
}
int jude(int k ,int n)
{
    for(int i = 1 ;i <= n ;i ++)
    {
        if(i == 1) B[i] = A[i] - k;
        else
        {
            if(A[i] > B[i-1]) B[i] = maxx(B[i-1]+1 ,A[i] - k);
            else
            {
                if(A[i] + k > B[i-1]) B[i] = B[i-1]+1;
                else return 0;
            }
        }
    }
    return 1;
}
int main ()
{
    int t ,n ,cas = 1 ,i;
    scanf("%d" ,&t);
    while(t--)
    {
        scanf("%d" ,&n);
        for(i = 1 ;i <= n ;i ++)
        scanf("%d" ,&A[i]);
        int low = 0 ,up = 1000005 ,mid ,ans;
        while(low <= up)
        {
            mid = (low + up) >> 1;
            if(jude(mid ,n)) ans = mid ,up = mid - 1;
            else low = mid + 1;
        }
        printf("Case #%d:\n" ,cas ++);
        printf("%d\n" ,ans);
    }
    return 0;
}
hdu5248序列变换(二分+贪心)基础题的更多相关文章
- hdu 1009 贪心基础题
		B - 贪心 基础 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bi ... 
- hdu5248 序列变换
		百度之星的题.其实最简单的方法是二分答案,我竟然没想到,直接去想O(n)的去了,最后导致滚粗... 题意就是给一个数列,要求把它处理成递增序列. 首先我想到了O(n^2)的算法,然后再优化成O(n)过 ... 
- ZOJ 1654 二分匹配基础题
		题意: 给你一副图, 有草地(*),空地(o)和墙(#),空地上可以放机器人, 机器人向上下左右4个方向开枪(枪不能穿墙),问你在所有机器人都不相互攻击的情况下能放的最多的机器人数. 思路:这是一类经 ... 
- 洛谷P5019 铺设道路 题解 模拟/贪心基础题
		题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ... 
- [题解]hdu 1009 FatMouse' Trade(贪心基础题)
		Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ... 
- 序列变换(hdu5248)
		序列变换 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ... 
- hdu5256序列变换(非递减子序列)
		题意(中文直接粘吧)序列变换 Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元 ... 
- 2015年百度之星初赛(1) --- C 序列变换
		序列变换 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ... 
- python每日经典算法题5(基础题)+1(中难题)
		现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级 ... 
随机推荐
- pytorch(09)transform模块(基础)
			transforms transforms运行机制 torchvision.transforms:常用的图像预处理方法 torchvision.datasets:常用数据及的dataset实现,mni ... 
- jdk 集合大家族之Map
			jdk 集合大家族之Map 前言: 之前章节复习了Collection接口相关,此次我们来一起回顾一下Map相关 .本文基于jdk1.8. 1. HashMap 1.1 概述 HashMap相对于Li ... 
- rest framework Response
			回应 不同于基本的HttpResponse对象,TemplateResponse对象保留先前由视图提供给计算响应上下文的细节.该响应的最终输出,不计算直到需要它,以后在响应过程. - Django文档 ... 
- STL之string容器
			string string封装了char*,管理这个字符串,是一个char*型的容器. string的相关操作 头文件 #include<string> string构造函数 string ... 
- Java 树结构的基础部分(二)
			1 顺序存储二叉树 1.1 顺序存储二叉树的概念  基本说明 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组, 看下面的示意图.  要求: 1) 右 ... 
- BuaacodingT141 microhhh的回城 题解(模拟)
			题目链接 microhhh的回城 解题思路 这题挺有意思的.本来寻思放在\(DS\)第一次练习赛应该不会很难吧,结果愣是卡在数据范围上写不出来. 然后暴力过掉了,但是用了\(1019ms\).感觉可以 ... 
- 自动获取IMC系统所有网络设备资产信息
			1 #coding=utf8 2 3 """ 4 CMDB接口调用 5 """ 6 import csv 7 import json 8 i ... 
- C语言之通讯录的模拟实现
			C语言之通讯录的模拟实现 在C语言学习结束之际,谨以此篇文章来对C语言的学习告一段落. 纲要: 通讯录的静态版本 通讯录的动态版本 通讯录的带文件版本 因为三种实现方法除了储存形式不同,其他都基本相同 ... 
- 移动文件--mv
			mv file srcpath 将文件移动到指定目录下 mv dir srcpath 将文件移动到指定目录下 
- 【Flutter 3-5】Flutter进阶教程——在Flutter中使用Lottie动画
			作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) Lottie动画 在移动开发中总是需要展示一些动画特效,作为程序员的我们并不是很擅长用代码做动画,即便是有些动画可以实现,在跨平台的过 ... 
