poj1159

来源:互联网 发布:中国出口武器 知乎 编辑:程序博客网 时间:2024/05/30 20:08

short int

#include <iostream>#include <cstdio>#include <cstring>#include <climits>#include <algorithm>using namespace std;char a[5001],b[5001];short int dp[5001][5001];int n;int solve(){    memset(dp,0,sizeof(dp));    for(int i=n-1,j=0;i>=0;--i,++j)        b[j] = a[i];    for(int i=0;i<n;++i)        for(int j=0;j<n;++j)            if(*(a+i)==*(b+j))                dp[i+1][j+1]=dp[i][j]+1;            else                dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);    return n-dp[n][n];}int main(){   while(scanf("%d",&n)!=EOF)   {        scanf("%s",a);        printf("%d\n",solve());   }    return 0;}

roll

#include <iostream>#include <cstdio>#include <cstring>#include <climits>#include <algorithm>using namespace std;char a[5001],b[5001];short int dp[2][5001];int n;int r1=0,r2=1,temp;void cc(){    memset(dp[r1],0,sizeof(dp[r1]));    temp=r1;    r1=r2;    r2=temp;}int solve(){    memset(dp,0,sizeof(dp));    for(int i=n-1,j=0;i>=0;--i,++j)        b[j] = a[i];    for(int i=0;i<n;++i)    {        for(int j=0;j<n;++j)            if(*(a+i)==*(b+j))                dp[r2][j+1]=dp[r1][j]+1;            else                dp[r2][j+1]=max(dp[r2][j],dp[r1][j+1]);        cc();    }    return n-dp[r1][n];}int main(){   while(scanf("%d",&n)!=EOF)   {        scanf("%s",a);        printf("%d\n",solve());   }    return 0;}



0 0
原创粉丝点击