记录编号 |
166852 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Perform巡回演出 |
最终得分 |
100 |
用户昵称 |
0 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.010 s |
提交时间 |
2015-06-16 14:56:47 |
内存使用 |
1.21 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
#define MAXN 1001UL
#define READ
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int n,k;
int a[15][15][MAXN];
int f[MAXN][15];
void work(){
memset(f,0,sizeof(f));
memset(a,0,sizeof(a));
int t;
int i,j,d;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
if(i==j)
continue;
scanf("%d",&t);
for(d=1;d<=t;++d)
scanf("%d",&a[i][j][d]);
for(d=t+1;d<=k;++d)
a[i][j][d]=a[i][j][d-t];
}
for(i=2;i<=n;++i)
f[1][i]=a[1][i][1];
for(i=2;i<=k;++i)
for(j=1;j<=n;++j){
f[i][j]=0x3fffffff;
for(d=1;d<=n;++d){
if(a[d][j][i]==0)
continue;
if(f[i-1][d]!=0)
f[i][j]=Min(f[i][j],f[i-1][d]+a[d][j][i]);
}
if(f[i][j]==0||f[i][j]==0x3fffffff){
printf("0\n");
return ;
}
}
printf("%d\n",f[k][n]);
}
int main(){
#ifdef READ
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout);
#endif
int i,j;
while(scanf("%d%d",&n,&k)==2&&n&&k)
work();
}