#include <iostream> using namespace std; char s[16]; int cnt[256]; int tot[256]; int m[256]; struct DICT { char words[10]; int len,val; }dic[40010]; int tovalue(char ch[]) { int sum=0; for(int i=0;ch[i]!='\0';++i) sum+=m[ch[i]]; return sum; } int add(int list[],char ch[]) { for(int i=0;ch[i]!='\0';++i){ ++list[ch[i]]; if(list[ch[i]]>tot[ch[i]]) return false; } return true; } int main() { m['q']=7;m['w']=6;m['e']=1;m['r']=2;m['t']=2;m['y']=5;m['u']=4;m['i']=1;m['o']=3;m['p']=5; m['a']=2;m['s']=1;m['d']=4;m['f']=6;m['g']=5;m['h']=5;m['j']=7;m['k']=6;m['l']=3; m['z']=7;m['x']=7;m['c']=4;m['v']=6;m['b']=5;m['n']=2;m['m']=5; int ans=0; scanf("%s",s); for(int i='a';i<='z';++i) tot[i]=0; for(int i=0;s[i]!='\0';++i) ++tot[s[i]]; int s_len=strlen(s); int dic_index=0; while(scanf("%s",s)==1&&s[0]!='.'){ for(int i='a';i<='z';++i) cnt[i]=0; int v=tovalue(s); int len=strlen(s); if(add(cnt,s)==1) ans=max(ans,v); if((s_len==6&&len==3)||(s_len==7&&len<=4)){ strcpy(dic[dic_index].words,s); dic[dic_index].len=len; dic[dic_index].val=v; ++dic_index; } } if(s_len>=6){ for(int i=0;i<dic_index;++i) for(int j=i+1;j<dic_index;++j){ for(int k='a';k<='z';++k) cnt[k]=0; if(!add(cnt,dic[i].words)) continue; if(!add(cnt,dic[j].words)) continue; ans=max(ans,dic[i].val+dic[j].val); } } printf("%d",ans); return 0; }
原文地址:http://blog.csdn.net/sepnine/article/details/45869921