Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1520373
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2010-04-01 09:35:15

#include
#include
ifstream filein("maxsub.in");     //定义输入文件铭
ofstream fileout("maxsub.out");
char ans[30000],string[101][102];
int len[101];
//dp 的状态转移函数,n为输入的字符串
int get(int n, int * x);
{
    int i,ret,index;    
    for(i=1;i<=n;i++)
        if(x[i]==0)
        return 0;
    for(i=n-1,index=x[n]-1;i>=1;i--)
        index = index*len[i]+x[i]-1;
    if(ans[index]>=0)
        return ans[index];

    for(i=2;i<=n;i++)
    if(string[1][x[1]-1])!=string[i][x[i]-1])
        break;
    if(i>n)        //全部数组下标减1的规划值
    {
        int j;
        for(j=1;j<=n;j++)
            x[j] --;
        ret=get(n,x)+1;
        for(j=1;j<=n;j++)
            x[j]++;
    }else{
        ret = 0 ;  //有不等,为下标各减1之后的最大值
        for(i=1;i<=n;i++)
        {
            x[i]--;
            int rem = get(n, x);
            if(rem > ret)
            ret = rem;
            x[i]++;
        }
    }
    ans[index] = ret;
    return ret;    //
}
void mian()
{
    fint i,j,n,temp[101];
    filein>>t;
    for(i=1;i<=t;i++)
    {
        memset(ans , 0xff, sizeof(ans)); //初始化状态表示为-1
        filein>>n;
        for(j=1;j<=n;j++)
        {
            filein>>string[j];
            temp[j]=len[j]=(int)strlen(string[j]);
        }//读入字符串
        fileout<    }
}
阅读(829) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~