Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
测试数据以及我的小代码abcbdcab bdcabc amnpnrmn bnrpanm abcbdab abcbdab abc abacabc abacada bcd abdecfg acgbde dynamic programming programming contest textbook txtbokk abcfbc abfcab abcfbc abfc xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa answer: 5 4 7 3 3 4 3 2 6 4 4 0 200 我的代码: #include <iostream> using namespace std; #define maxn 1002 int f[maxn][maxn]; char str1[maxn],str2[maxn]; int find(char &c,char str[],int n) { for(int i = n;i>=0;i--) { if(str[i]==c) return i; } return -1; } //n1,n2指从有字母的位置 int dp(int n1,int n2) { if(f[n1][n2]!=-1) return f[n1][n2]; int index = find(str1[n1],str2,n2); if(n1==0) { if(index==-1)//最后一个都不是 { f[n1][n2]=0; return 0; }else{//最后一个是 f[n1][n2]=1; return 1; } }else { if(index==-1)//去找下一个 { f[n1][n2]=dp(n1-1,n2); return f[n1][n2]; }else{//最后一个字母有出处,考虑要还是不要 int a = dp(n1-1,n2);//不要 int b = dp(n1-1,index-1);//要 if(a>b+1) f[n1][n2]=a; else f[n1][n2]=b+1; return f[n1][n2]; } } } int main() { while (cin >> str1 >> str2) { int len1 = strlen(str1)-1; int len2 = strlen(str2)-1; memset(f,-1,sizeof(f)); dp(len1,len2); printf("%d\n",f[len1][len2]); /*for(int i=0;i<=len1;i++) { for(int j=0;j<=len2;j++) printf("%d ",f[i][j]); printf("\n"); }*/ } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator