记录编号 3328 评测结果 AAAAAAAAAA
题目名称 Perform巡回演出 最终得分 100
用户昵称 Gravatarzqzas 是否通过 通过
代码语言 C 运行时间 0.009 s
提交时间 2008-10-06 17:31:04 内存使用 0.28 MiB
显示代码纯文本
#include<stdio.h>
#define K 1000
#define N 10
#define D 30
#define INF 100000000
#define MIN(x,y) ((x)<(y)?(x):(y))

long f[K+1][N],cost[N][N][D+1],n,k;

void ini(void);
void dp(void);

int main(void)
{
  freopen("candy.in","r",stdin);
  freopen("candy.out","w",stdout);
  while(1)
    {
      scanf("%ld%ld",&n,&k);
      if(n==k && n==0)
	break;
      ini();
      dp();
    }
  return 0;
}
void ini(void)
{
  long i,j,k;

  for(i=0;i<n;++i)
    for(j=0;j<n;++j)
      if(i!=j)
	{
	  scanf("%ld",&cost[i][j][0]);
	  for(k=1;k<=cost[i][j][0];++k)
	    scanf("%ld",&cost[i][j][k]);
	}
}
void dp(void)
{
  long i,j,m;

  for(i=0;i<=k;++i)
    for(j=0;j<n;++j)
      f[i][j]=INF;
  f[0][0]=0;
  for(i=1;i<=k;++i)
    for(j=0;j<n;++j)
      {
	for(m=0;m<n;++m)
	  if(j!=m && cost[m][j][(i-1)%cost[m][j][0]+1]!=0 && f[i-1][m]!=INF)
	    f[i][j]=MIN(f[i][j],f[i-1][m]+cost[m][j][(i-1)%cost[m][j][0]+1]);
      }
  if(f[k][n-1]==INF)
    printf("0\n");
  else
    printf("%ld\n",f[k][n-1]);
}