poj 1239
二次dp,还算好想。
先第一遍dp找出最后一个数字最小是几。
dpf[i]=max{j}+1(dpf[j],dpf[j]+1,…,j位组成的数字小于j+1,j+2,…,i位组成的数字。
在第二遍dp,找出第一个数字最大是几。
dpb[i]=max{j}(I,i+1,…,j为组成的数字小于j+1,j+2,…,dpb[i+2]位组成的数字。
按轨迹输出。
!记住:每次都要将两个数组清零!(坑了我半天)
代码:
#include<cstdio>
#include<cstring>
using namespace std;
int dpf[90]={0},dpb[90]={0};
char a[90];
int max(int x,int y){
return(x>y)?x:y;
}
int cmp(int x1,int y1,int x2,int y2){
while(a[x1]=='0' && x1<=y1)x1++;
while(a[x2]=='0' && x2<=y2)x2++;
if(x1>y1 && x2>y2)return 1;
if(y1-x1>y2-x2)return 0;
if(y1-x1<y2-x2)return 1;
for(int i=0;i<=y1-x1;i++){
if(a[x2+i]>a[x1+i])return 1;
if(a[x1+i]>a[x2+i])return 0;
}
return 0;
}
int main(){
scanf("%s",a);
while(strlen(a)!=1 || a[0]!='0'){
int l=strlen(a);
dpf[0]=0;
for(int i=1;i<l;i++){
dpf[i]=0;
for(int j=0;j<i;j++)
if(j+1>dpf[i] && cmp(dpf[j],j,j+1,i))
dpf[i]=j+1;
}
// for(int i=0;i<l;i++)printf("%d ",dpf[i]);printf("\n");
int tl=dpf[l-1];
memset(dpb,0,sizeof(dpb));
dpb[tl]=l-1;
for(int i=tl-1;a[i]=='0';i--)
dpb[i]=l-1;
for(int i=tl-1;i>=0;i--){
for(int j=i;j<=tl-1;j++){
if(cmp(i,j,j+1,dpb[j+1]))
dpb[i] = max(dpb[i], j);
}
}
// for(int i=0;i<l;i++)printf("%d ",dpb[i]);printf("\n");
int cur=dpb[0];
for(int i=0;i<l;){
for(;i<=cur && i<l;i++)printf("%c",a[i]);
if(i<l)printf(",");
cur=dpb[cur+1];
}
printf("\n");
scanf("%s",a);
}
return 0;
}
poj 1239的更多相关文章
- POJ 1239 Increasing Sequences 动态规划
题目链接: http://poj.org/problem?id=1239 Increasing Sequences Time Limit: 1000MSMemory Limit: 10000K 问题描 ...
- POJ 1239 Increasing Sequences(经典的两次dp)
http://poj.org/problem?id=1239 题意:给出一串序列,现在要添加逗号作为分隔符,使得序列是递增序列,然后让最后一个数尽量小,第一个数尽量大. 思路:先从头到尾进行一次dp, ...
- POJ 1239 Increasing Sequences [DP]
题意:略. 思路:进行两次dp. 第一次dp从前向后,用dp[x]表示从第x位向前dp[x]位可构成一个数字,且与前面的数组符合题意要求.最后求的dp[n]即为最后一个数字的长度. 而题目还有要求,所 ...
- 【转载】ACM总结——dp专辑
感谢博主—— http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 动态规划一 ...
- 【DP专辑】ACM动态规划总结
转载请注明出处,谢谢. http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 ...
- dp专题训练
****************************************************************************************** 动态规划 专题训练 ...
- 【DP专辑】ACM动态规划总结(转)
http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强, ...
- dp有哪些种类
dp有哪些种类 一.总结 一句话总结: 二.dp动态规划分类详解 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. * ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
随机推荐
- Spring远程调用技术<3>-Spring的HTTP Invoker
前面提到RMI使用java标准的对象序列化机制,但是很难穿透防火墙. 另一方面,Hessian和Burlap能很好地穿透防火墙,但是使用私有的对象序列化机制. Spring提供的http invke ...
- python高级之网络编程
python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...
- vuejs mvvm图解
- Python-18-Django 基础篇
1. Web 框架介绍 具体介绍Django之前,必须先介绍WEB框架等概念. Web框架:通俗地讲,就是别人已经设定好的一个web网站模板,你学习它的规则,然后「填空」或「修改」成你自己需要的样子. ...
- Grumpy: Go 上运行 Python!
Google 运行数百万行Python代码用于驱动youtube.com和YouTube API的前端服务器,每秒可以提供数百万的请求! YouTube的前端运行在CPython 2.7上,所以我们投 ...
- linux tcl expect 安装(转)
linux tcl expect 安装 一.Tcl安装 1. 下载:tcl8.4.20-src.tar.gz http://www.tcl.tk/software/tcltk/downloadnow ...
- Servlet和JSP
Servlet 一.Servlet 的生命周期. servlet 有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet 接口 的 ...
- 【原】Spark学习总结-六个专题
最近从hadoop转向Spark了,学了一段时间了,准备写个专题,主要写pySpark的应用,主要计划是: 主题 内容概要 聚类(5.6) 1.几种常用的聚类算法:2.pyspark中聚类算法的应用( ...
- 跟我从零基础学习Unity3D开发--初识U3D
首先声明,我也是才开始学,把自己学的记录下来也供一些想要学习的朋友参考,一起努力.希望大家能给我指点一下.切莫喷我. 什么是Unity3d呢? 百度百科------Unity是由Unity Techn ...
- C 语言学习的第 05 课:C 语言基础(01)
C语言程序中的绝大部分应该记录在以.c作为扩展名的文件里,这种文件叫做C语言 程序的源文件. C语言中还包括以.h作为扩展名的文件,这种文件叫做头文件. C语言中的四则运算: 加:+ 减:- 乘 ...