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; } }