ural 1002 phone numbers
2011-01-30 12:30
274 查看
这是一道动归题, 算法复杂度为 O(n*len).
]#include<iostream> using namespace std; const int MAX=10000; char str[105]; int n; char s[50002][55]; int f[105][2]; int l,len[50002]; int T[26]={2,2,2,3,3,3,4,4,1,1,5,5,6,6,0,7,0,7,7,8,8,8,9,9,9,0}; ///////////a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z int cmp(int j,int i) { int t; for(t=0;t<len[j];t++) { if(str[i+1-len[j]+t]-'0'!=T[s[j][t]-'a']) return 0; } return 1; } void print(int i) { if(i<=0) return; print(i-len[f[i][1]]); printf("%s",s[f[i][1]]); if(i!=l-1) printf(" "); else printf("/n"); return; } int main() { int i,j,k; while(scanf("%s",str)&&str[0]!='-') { l=strlen(str); scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%s",s[i]); len[i]=strlen(s[i]); } for(i=0;i<l;i++) { f[i][0]=MAX; for(j=1;j<=n;j++) { if(len[j]>i+1) continue; if(len[j]==i+1) { if(cmp(j,i)) { f[i][0]=1; f[i][1]=j; } } else if(cmp(j,i)) { if(f[i-len[j]][0]+1<f[i][0]) { f[i][0]=f[i-len[j]][0]+1; f[i][1]=j; } } } } if(f[l-1][0]==MAX) printf("No solution./n"); else { print(l-1); } memset(s,0,sizeof(s)); memset(f,0,sizeof(f)); memset(str,0,sizeof(str)); memset(len,0,sizeof(len)); } return 0; }
相关文章推荐
- ural 1002 Phone numbers
- URAL 1002 Phone Numbers
- URAL 1002. Phone Numbers
- URAL 1002 Phone Numbers
- ural 1002. Phone Numbers tire+spfa
- 1002. Phone Numbers
- Timus 1002. Phone numbers
- Timus : 1002. Phone Numbers 题解
- 1002.Phone Numbers
- URAL1002——DP——K-based Numbers. Version 2(未AC)
- Timus : 1002. Phone Numbers 题解
- timus 1002. Phone Numbers(KMP&动态规划)
- 1002. Phone Numbers
- Valid Phone Numbers
- URAL 1233 - Amusing Numbers
- URAL - 1586 Threeprime Numbers
- leetcode-193 Valid Phone Numbers
- Ural_1013. K-based Numbers. Version 3(dp + 高精度)
- ural 1013 K-based Numbers. Version 3
- Ural(Timus) 1013. K-based Numbers. Version 3