hiho 有序01字符串 dp
2016-06-21 10:35
162 查看
题目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 ; int zero ,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\n",dp(a+0,x)); } return 0; }
相关文章推荐
- 9-6-二叉排序树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
- Less基础教程
- WinRar的妙用
- 常见的系统相关参数调整
- Calendar的add()方法介绍
- [Effective JavaScript 笔记]第42条:避免使用轻率的猴子补丁
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 杂项笔记
- DIV CSS 鼠标事件
- Flexbox总结
- Eclipse 的配色配置
- shell脚本 一些基本应用题
- 安卓drawable和mipmap
- BZOJ3673&BZOJ3674 可持久化并查集及加强版
- 从Docker容器内拷贝文件到主机上
- 【leetcode】9. Palindrome Number
- Kotlin简介
- [Effective JavaScript 笔记]第41条:将原型视为实现细节
- iostat的深入理解
- BadTunnel实战之远程劫持任意内网主机流量