#include<iostream>#include<fstream>#include<stdio.h>#include<string>#define MAX 10000using namespace std;ifstream filein("COMPRE5.DAT");ofstream fileout("comper5.out");string s[1000];int s1[1000]; int len,map[10000],fk;string doc; void del(string a,int n){ string b(a,n,a.length()); doc=b;} void workout(){ int i,j; for(i=1;i<=len;i++) map[i]=MAX; map[0]=0; j=0; while(doc.length()>0) { for(i=0;i<fk;i++) { int n=s[i].length(); string b(doc,0,n); if(s[i]==b) { if(map[j]+s1[i]<map[j+s[i].length()]) map[j+s[i].length()]=map[j]+s1[i]; } } del(doc,1); j++; }}int main(){ int N,i; string temp; filein>>N; filein>>temp; fk=0; while(N>0) { N--; fk=0; doc=temp; while(filein>>temp) { if(temp[0]=='(') { for(i=1;temp[i]!=',';i++); string a(temp,1,i-1); s[fk]=a; i++; for(int j=0;temp[i]!=')';j++,i++); s1[fk]=j; fk++; } else break; } len=doc.length(); workout(); if(map[len]==MAX) fileout<<"0"<<endl; else fileout<<map[len]<<endl; } return 0;}

评论