首页 > 其他分享 >hdu 1511(dp)

hdu 1511(dp)

时间:2023-05-29 19:33:13浏览次数:38  
标签:hdu int s2 s1 str include 1511 dp



解题思路:两次dp确实很巧妙,我只想到了一次dp算出最后那个数最小,其实题目要求还要保证第一个数尽可能大,一开始也没有注意到。。


AC:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define oo 0x3f3f3f3f
#define maxn 90
int dp_min[maxn];
int dp_max[maxn];

int smaller(char *s1,char *e1,char *s2,char *e2)
{
    while(*s1 == '0' && s1 != e1) ++s1;
    while(*s2 == '0' && s2 != e2) ++s2;
    int len1 = e1-s1;
    int len2 = e2-s2;
    if(len1 != len2)
        return len1-len2;
    while(s1 != e1)
    {
        if(*s1 != *s2)
            return *s1-*s2;
        ++s1;
        ++s2;
    }
    return 1;
}

int main()
{
    char str[maxn];
    while(scanf("%s",str+1) && strcmp(str+1,"0"))
    {
        int n=strlen(str+1);
        for(int i = 1;i <= n;i++)
            dp_min[i] = dp_max[i] = 1;	//注意这个初始化,开始时每个数结尾的范围都是1-dp[i];
        for(int i = 2;i <= n;i++)
        {
            for(int j = i-1;j >= 1; j--)
            {
                if(smaller(str+dp_min[j],str+j+1,str+j+1,str+i+1) < 0)
                {
                    dp_min[i]=j+1;
                    break;
                }
            }
        }

        int m = dp_min[n];
        dp_max[m] = n;
        int i,j;
        for(i = m-1; i >= 1 && str[i] == '0'; i--)
            dp_max[i] = n;
        for(; i >= 1; i--)
        {
            for(j = m-1; j >= i; j--)
            {
                if(smaller(str+i,str+j+1,str+j+1,str+dp_max[j+1]+1) < 0)
                {
                    dp_max[i] = j;
                    break;
                }
            }
        }

        int f = 0;
        for(i = 1,j = dp_max[i];i <= n;j = dp_max[j+1])
        {
            if(!f) f = 1;
            else printf(",");
            while(i <= j && i <= n)
                printf("%c",str[i++]);
        }
        puts("");
    }
	return 0;
}




标签:hdu,int,s2,s1,str,include,1511,dp
From: https://blog.51cto.com/u_16143128/6373672

相关文章

  • hdu 5102(队列+节点扩展)
    TheK-thDistanceTimeLimit:8000/4000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptionGivenatree,whichhasnnodeintotal.Definethedistancebetweentwonodeuandvisthenumberofedgeontheirunique......
  • hdu 5367(线段树+区间合并)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367官方题解:对于求“高山脉”长度,可以利用线段树。树节点中保存左高度连续长度,左高度连续区间的高度,左高度连续区间的状态(即是否高于第一个高度不同的山),右高度连续长度,右高度连续区间的高度,右高度连续区间的状态,每段区间内的“......
  • hdu 5201(隔板法+容斥原理)
    TheMonkeyKingTimeLimit:8000/4000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptionnpeaches.Andtherearemmonkeys(includingGoKu),theyarenumberedfrom1tom,GoKu’snumberis1.GoKuwa......
  • hdu 5086(dp)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和。解题思路:这道题直接枚举肯定不行,所以要找递推关系。假设:{1,2,3,4}为某一个序列,假设我们已经找到了{1,2,3},接下来把{4}加入进去;由于{1,2,3}已经有{1},{2},{3},{1,......
  • hdu 5188(限制01背包)
    zhxandcontestTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptionAsoneofthemostpowerfulbrushesintheworld,zhxusuallytakespartinallkindsofcontests.Oneday,zhxtakespar......
  • hdu 5171(矩阵快速幂)
    GTY'sbirthdaygiftTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptiona,b∈S),andadda+b Input2≤n≤100000,1≤k≤1000000000).Thesecondlinecontainsnelementsai......
  • hdu 5157(manacher+前缀和+树状数组)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5157解题思路:我们可以先用mancher算法对字符串进行处理,把以每个点为中心的回文串半径求出来,然后进行处理。加入对以p为中心的点,从p-r[i]+1~p都是回文串的开头,那么对于每个回文串(开头是j)只要记录结尾从1~j-1的回文串个数,我们可......
  • 【Oracle impdp/expdp】Big lesson from failure with impdp/expdp in 12c
     最近忙于做数据库12c-19c迁移,基于公司的情况,选用了最拿手的expdp/impdporacle自带的王者级别工具进行迁移。按照常规思路,一顿操作猛如虎,expdp直接选用full=y将数据全库导出,然后在19c中导入,无论是12c中的导出还是19c中的导入数据,没有任何的错误,然而在无意间,反过来去检查下两......
  • upc 6888: 守卫(区间dp O(n^2) )
    6888:守卫时间限制:1Sec  内存限制:512MB提交:102  解决:33[提交][状态][讨论版][命题人:admin]题目描述九条可怜是一个热爱运动的女孩子。这一天她去爬山,她的父亲为了她的安全,雇了一些保镖,让他们固定地呆在在山的某些位置,来实时监视九条可怜,从而保护她。具体来......
  • upc 6597: Don't Be a Subsequence (字符串的最短不匹配子序列 dp)
    6597:Don'tBeaSubsequence时间限制:1Sec  内存限制:128MB提交:237  解决:45[提交][状态][讨论版][命题人:admin] 题目描述AsubsequenceofastringSisastringthatcanbeobtainedbydeletingzeroormorecharactersfromSwithoutchangingtheor......