#include<stdio.h> int main() { int t,i,j,n[100],x,times,m,a[1000][100],min,mini,minj,c[1000],csum[1000],sum; scanf("%d",×); for(t=1;t<=times;t++) { sum=0; scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d",&n[i]); for(j=0;j<n[i];j++) { scanf("%d",&a[i][j]); } } csum[0]=0; for(i=0;i<m;i++) { scanf("%d",&c[i]); if(i>0)csum[i]=c[i]+csum[i-1]; else csum[i]=c[i]; } //录入数据 while(1)//不断找最小的 { min=a[0][0]; for(i=0;i<m;i++)//找此时最小的 { for(j=0;j<n[i];j++) { if(min>=a[i][j]) { min=a[i][j];mini=i;minj=j; } } } if(min==21)break; a[mini][minj]=21; if(csum[mini]>=min)//能得到此冰心时 { sum++; for(x=mini;x>=0;x--) { if(c[x]>=min) { c[x]-=min; for(i=x;i<m;i++)csum[i]-=min; break; } else { min-=c[x]; for(i=x;i<m;i++)csum[i]-=c[x]; } } } } printf("%d\n",sum); } return 0; } |
Double click to view unformatted code.