zoukankan      html  css  js  c++  java
  • hiho 有序01字符串 dp

    题目1 : 有序01字符串

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    对于一个01字符串,你每次可以将一个0修改成1,或者将一个1修改成0。那么,你最少需要修改多少次才能把一个01串 S 变为有序01字符串(有序01字符串是指满足所有0在所有1之前的01串)呢?

    输入

    第一行是一个整数 T,代表测试数据的组数。(1 ≤ T ≤ 10)

    以下T行每行包含一个01串 S 。(1 ≤ |S| ≤ 1000)

    输出

    对于每组测试数据输出最少需要修改的次数。

    样例输入
    3
    000111
    010001
    100000 
    样例输出
    0
    1
    1
    思路:找到1的时候考虑是否改成0;
       min(1后面的字符串最小改变值+1,1后面的0的个数;
    #include<bits/stdc++.h>
    using namespace std;
    #define ll __int64
    #define mod 1000000007
    #define pi (4*atan(1.0))
    const int N=2e3+10,M=1e6+10,inf=1e9+10;
    char a[N];
    int zero[N],x;
    int dp(char *a,int len)
    {
        if(len==0)
        return 0;
        for(int i=0;i<x;i++)
        if(a[i]=='1')
        return min(dp(a+i+1,len-i-1)+1,zero[x-len+i]);
        return 0;
    }
    int main()
    {
        int y,z,i,t;
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s",a+1);
            x=strlen(a+1);
            memset(zero,0,sizeof(zero));
            for(i=x;i>=1;i--)
            if(a[i]=='0')
            zero[i-1]=zero[i]+1;
            else
            zero[i-1]=zero[i];
            printf("%d
    ",dp(a+0,x));
        }
        return 0;
    }
  • 相关阅读:
    [问题2014A05] 复旦高等代数 I(14级)每周一题(第七教学周)
    oracle的相关信息
    进程和线程的区别
    阿里云人脸检测定位
    php与oracle11g经典分页
    Linux 远程复制
    redis的相关信息
    教你编译PHP7 (nginx+mysql+php7)
    nginx的相关信息
    php about session store db or cache
  • 原文地址:https://www.cnblogs.com/jhz033/p/5602811.html
Copyright © 2011-2022 走看看