1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 int a[10][12],f[12],sum[12],lim=1001;//限制边界次数 题目要求不超过1000
5 int n,m;
6 void dfs(int s){
7 for(int i=0;i<=f[s];i++){
8 for(int k=1;k<=m;k++)
9 sum[k]+=a[s][k]*i;//每种颜色的本子的数目;
10 if(s<n) dfs(s+1);
11 else{
12 int flag=0;
13 for(int k=2;k<=m;k++){
14 if(sum[k]!=sum[k-1]){
15 flag=1;break;
16 }
17 }
18 if(!flag)//每种颜色的本子的数目都一样 sum[1..n]都可以
19 if(sum[1]*m<lim&&sum[1]>0)
20 lim=min(lim,sum[1]*m);
21 }
22 for(int k=1;k<=m;k++)//回溯
23 sum[k]-=a[s][k]*i;
24 }
25 }
26 int main(){
27 scanf("%d%d",&n,&m);
28 for(int i=1;i<=n;i++)//第i行第j列的整数aij表示在第i种类型的本子中包含小寒喜欢的颜色j的纸有aij(1≤aij≤100)张
29 for(int j=1;j<=m;j++)
30 scanf("%d",&a[i][j]);
31 for(int i=1;i<=n;i++)//本子数目
32 scanf("%d",f+i);
33 dfs(1);//从第一本开始搜
34 if(lim<=1000) printf("%d\n",lim);
35 else printf("alternative!\n");
36 return 0;
37 }