View Code of Problem 33

#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",&times);
	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.


Back to problem 33