代码如下:
import java.util.Scanner;
/**
*
* @author Administrator
*/
public class pku3211 {
static int minTime,sum;
static int[][] c;
static void np(int i,int count,int n,int sum1){
int temp;
if(count==n) {
temp=sum-sum1;
if(temp>sum1){
if(temp<minTime)
minTime=temp;
return ;
}
else{
if(sum1<minTime)
minTime=sum1;
return ;
}
}
np(i,count+1,n,sum1);
sum1+=c[i][count];
np(i,count+1,n,sum1);
}
public static void main(String argvs[]){
int n,m,i,j,temp,count,min_time;
String str=new String();
String[] color=new String[100];
Scanner in=new Scanner(System.in);
while(in.hasNext()){
m=in.nextInt();
n=in.nextInt();
c=new int[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
c[i][j]=0;
min_time=0;
if(m==0&&n==0) break;
for(i=0;i<m;i++){
color[i]=new String();
color[i]=in.next();
}
for(i=0;i<n;i++){
temp=in.nextInt();
count=0;
str=in.next();
for(j=0;j<m;j++){
if(str.endsWith(color[j])){
while(c[j][count]!=0) count++;
c[j][count]=temp;
break;
}
}
}
for(i=0;i<m;i++){
sum=0;
minTime=1000;
for(j=0;c[i][j]!=0;j++)
sum+=c[i][j];
if(sum==0)
minTime=0;
else
np(i,0,j-1,0);
min_time+=minTime;
}
System.out.println(min_time);
}
}
}