栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1147 Formatting Text

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1147 Formatting Text

#include <stdio.h>#include <string.h>#define INF 1000000000#define LEN 90#define MAXN 10010char w[MAXN][LEN];int len[MAXN];int f[MAXN][LEN];bool visit[MAXN][LEN];int path[MAXN][LEN];int L,n;int input(){    int i,j,flag;    char temp[MAXN];    gets(temp);    sscanf(temp,"%d",&L);    if(!L)  return 0;    n=1;    while(1)    {        gets(temp);        if(temp[0]=='') break;        for(flag=0,j=0,i=0; i<strlen(temp); i++)        { if(temp[i]==' ' && !flag)        continue; else if(temp[i]==' ' && flag) {     flag=0;     w[n][j]='';     len[n]=strlen(w[n]);     j=0;     n++; } else if(temp[i]!=' ' && flag)     w[n][j++]=temp[i]; else if(temp[i]!=' ' && !flag) {     flag=1;     j=0;     w[n][j++]=temp[i]; }        }        if(flag)         { w[n][j]=''; len[n]=strlen(w[n]); n++;        }    }    n--;    return 1;}void print_path(int i , int j){    int t,k,c;    if(i==n)     {        printf("%sn",w[i]);        return ;      }    if(path[i][j]==0)      {        t=1;          printf("%sn",w[i]);        print_path(i+1,t);        return ;    }    else if(path[i][j]!=-1)    {        c=path[i][j];  t=j+len[i]-1+c+1;         printf("%s",w[i]);        while(c) { printf(" "); c--;}        print_path(i+1,t);        return ;    }    return ;}int dp(int i , int j){    int ans,c,k,b;    if(visit[i][j])        return f[i][j];    visit[i][j]=1;    f[i][j]=INF;    if(i>n)      {        if(j==1)   return f[i][j]=0;        else     return f[i][j]=INF;    }    if( j+len[i]-1 == L)      {        ans=dp(i+1,1);        if(ans<f[i][j])        { f[i][j]=ans; path[i][j]=0;         }        return f[i][j];    }    if(j==1)     {        ans=dp(i+1,1)+500;          if(ans<f[i][j])        { f[i][j]=ans; path[i][j]=0;         }    }    c=j+len[i]-1+2;     for(k=c; k<=L+1-len[i+1]; k++)    {        b=k-c;         ans=dp(i+1,k)+b*b;        if(ans<f[i][j])        { f[i][j]=ans; path[i][j]=b+1;         }    }    return f[i][j];}void solve(){    int i,j;    int ans;    memset(path,-1,sizeof(path));    memset(visit,0,sizeof(visit));    len[n+1]=0;    ans=dp(1,1);    print_path(1,1);    printf("n");}int main(){    while(input())    {        solve();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号