记录编号 |
166639 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Perform巡回演出 |
最终得分 |
100 |
用户昵称 |
zys |
是否通过 |
通过 |
代码语言 |
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
*/