记录编号 166639 评测结果 AAAAAAAAAA
题目名称 Perform巡回演出 最终得分 100
用户昵称 Gravatarzys 是否通过 通过
代码语言 C++ 运行时间 0.008 s
提交时间 2015-06-15 21:41:12 内存使用 1.21 MiB
显示代码纯文本
#define Min(a,b) ((a)<(b)?(a):(b))

#include<cstdio>
#include<cstring>

using namespace std;

int n,k,t;
int a[15][15][1005];
int f[1005][15];

int main()
{
    freopen("candy.in","r",stdin);
	freopen("candy.out","w",stdout);
	scanf("%d%d",&n,&k);
	label:
	while(n!=0)
	{
		for(int i=1;i<=n;i++)
		    for(int j=1;j<=n;j++)
		    {
				if(i==j)
				    continue;
				scanf("%d",&t);
				for(int h=1;h<=t;h++)
				    scanf("%d",&a[i][j][h]);
				for(int h=t+1;h<=k;h++)
				    a[i][j][h]=a[i][j][h-t];
		    }
		int j;
		for(int i=2;i<=n;i++)
		    f[1][i]=a[1][i][1];
		for(int i=2;i<=k;i++)
	   		 for(j=1;j<=n;j++)
			 {
				f[i][j]=10000000;
				for(int h=1;h<=n;h++)
				{
					if(a[h][j][i]==0)
				    	continue;
					if(f[i-1][h]!=0)
						f[i][j]=Min(f[i-1][h]+a[h][j][i],f[i][j]);
				}
				if(f[i][j]==0||f[i][j]==10000000)
				{
					printf("0\n");
					memset(a,0,sizeof(a));
					j=n+2;
					i=k+1;
					scanf("%d%d",&n,&k);
					goto label;
				}
			}
		/*for(int i=1;i<=k;i++)
		{
			printf("\n");
			for(int j=1;j<=n;j++)
			    printf("%d ",f[i][j]);
		}*/
		printf("%d\n",f[k][n]);
		memset(a,0,sizeof(a));
		scanf("%d%d",&n,&k);
	}
}
/*

3 6
2 130 150
3 75 0 80
7 120 110 0 100 110 120 0
4 60 70 60 50
3 0 135 140
2 70 80
2 3
2 0 70
1 80
0 0
*/