贪心 - bailian4137:最小新整数

题目链接

http://bailian.openjudge.cn/practice/4137/

这个题目原本以为选出前k大的数删除就可以得到正确结果,但是这种策略是错的,举一个反例:52376 2,如果取出7 6,得到523,显然还有更小的数 236。

正确的贪心策略是从左到右每次选取一个比后一位大的数,删除,进行k次,如果所有数字是增序的,就删除最后一个数字。

解题代码

#include <cstdio>
#include <cstring>
char s[15];
int m;

int main(){
    int t;
    scanf("%d", &t);
    while(t--){
        scanf("%s %d", s, &m);
        int l = strlen(s);
        while(m--){
            for(int i = 0; i < l; i++){
                if(s[i] > s[i+1]){
                    for(int j = i; j < l; j++){
                        s[j] = s[j+1];
                    }
                    break;
                }
            }
            l--;
        }
        printf("%s\n", s);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhangyue123/p/12610678.html

时间: 2024-10-04 12:40:56

贪心 - bailian4137:最小新整数的相关文章

4.6算法之贪心-3528:最小新整数

描述 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m.现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?例如: n = 9128456, k = 2, 则生成的新整数最小为12456 输入第一行t, 表示有t组数据:接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k.输出t行,每行一个数字,表示从n中删除k位后得到的最小整数.样例输入 2 9128456 2 1444 3 样例输出 12456

3528:最小新整数

描述 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m.现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?例如: n = 9128456, k = 2, 则生成的新整数最小为12456 输入第一行t, 表示有t组数据:接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k.输出t行,每行一个数字,表示从n中删除k位后得到的最小整数.样例输入 2 9128456 2 1444 3 样例输出 12456

4137:最小新整数

查看 提交 统计 提示 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m.现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?例如: n = 9128456, k = 2, 则生成的新整数最小为12456 输入 第一行t, 表示有t组数据:接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k. 输出 t行,每行一个数字,表示从n中

uva 714 - Copying Books(贪心 最大值最小化 二分)

题目描述开头一大堆屁话,我还仔细看了半天..其实就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,如果最小值相同情况下有多种分配方案,输出前面份数小的,就像字典序输出从小到大一样的意思. 这里用到贪心的方法,定义f(x)为真的条件是满足x为最大值使n本书分成k份,那么就是求x的最小值.如何确定这个x就是用的二分法,x一定大于0小于所有值的合,不断的二分再判断是否成立,成立就取左半边,不成立说明太小了就取右半边,写的时候还是没有把二分法理解透彻,我还怕会丢失

LiberOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖

6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 假设有 n nn 根柱子,现要按下述规则在这 n nn 根柱子中依次放入编号为 1,2,3,4,? 1, 2, 3, 4, \cdots1,2,3,4,? 的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何 2 22 个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在 

POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)

Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up and has divided the day into T shifts (1 <= T <= 1,000,000

寻找最小的整数

题目:给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数.比如[1,2,0]返回3,[3,4,-1,1]返回2,[1, 5, 3, 4, 2]返回6,[100, 3, 2, 1, 6,8, 5]返回4.要求使用O(1)空间和O(n)时间 解答:不停的让a[i] =i  归位. #include <stdio.h> void Swap(int &a, int &b) { int c = a; a = b; b = c; } int FindFirstNumberN

【贪心算法】最大整数

题目: 设有n个正整数,将它们连接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343,连成的最大整数为34331213. 又如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613. 输入: n 输入n个数. 输出: 连成的多位数. 思路: 让这几个数排排序连接成最大的整数,所以应考虑,各个整数顺序,那么对这几个整数排序的准则是什么? 准则:设两个整数是a,b,如果a+b大于b+a,那么a在b的前面,反之,b在a前面也就是局部的解 全局的解就是所有整

1. MissingInteger 最小遗失整数 Find the minimal positive integer not occurring in a given sequence.

package com.code; import java.util.Arrays; public class Test04_1 { public static int solution(int[] A) { int size = A.length; if(size==1){ // handle one element array if(A[0]==1){ return 2; }else{ return 1; } } Arrays.sort(A); // sort by JDK if(A[0]>