nyoj 37

//nyoj  37 代码有点乱,和最长公共子序列很像,只是多加了一个数组,之前调用函数,

一直超时,可是我看了下,为什么用一个整形数组存放倒置字符串

竟然可以AC,我测试了下数据,打印出来的是一串地址,为什么为什么为什么啊。。。。

#include <iostream>
#include <string.h>
#define Max(a,b) a>b?a:b
using namespace std;
int dp[1001][1001];

int main()
{
    int i,t;
    cin>>t;
    while(t--)
    {
        int s;
        char a[1001];
        cin>>a;
        s=strlen(a);
        char b[s];
        for(i=0;i<s;i++)  b[i]=a[s-i-1];
        int i,j;
    for(i=0;i<s;i++)
        for(j=0;j<s;j++)
        dp[i+1][j+1]=(a[i]==b[j])?dp[i][j]+1:Max(dp[i+1][j],dp[i][j+1]);
            cout<<s-dp[s][s]<<endl;
    }
    return 0;
}

#include"stdio.h"
#include"iostream"
#include"string.h"
#define max(a,b) a>b?a:b
using namespace std;
int dp[1100][1100];
int main()
{ 
    int a;
    cin>>a;
    while(a--)
   { 
    	char b[1100];
    	cin>>b;
	int c=strlen(b);
	int d[1100];
        int e;
     for(e=c-1;e>=0;e--)
	d[e]=b[c-e-1];
        int j,k;
       for(j=0;j<c;j++)
          for(k=0;k<c;k++)
 	{ 
           if(b[j]==d[k])
		dp[j+1][k+1]=dp[j][k]+1;
	   else
		dp[j+1][k+1]=max(dp[j+1][k],dp[j][k+1]);
        } 
	cout<<c-dp[c][c]<<endl;
    }
}

posted @ 2014-12-11 12:35  __夜风  阅读(175)  评论(0编辑  收藏  举报