描述:没什么难度,比较水一点的题
#include <cstdio>
#include <cstring>
struct fli
{
int d[10];
int flight[10][35];
int sum;
int count;
};
fli f[12];
int main()
{
// freopen("a.txt","r",stdin);
int n,m,k,t=0,p;
int v[12];
while(scanf("%d%d",&n,&k)!=EOF)
{
if(!n&&!k) break;
for(int i=0; i<n; i++)
{
f[i].sum=f[i].count=0;
for(int j=0; j<n-1; j++)
{
scanf("%d",&f[i].d[j]);
for(int l=0; l<f[i].d[j]; l++) scanf("%d",&f[i].flight[j][l]);
}
}
for(int i=0; i<n-1; i++)
if(f[0].flight[i][0]) f[i+1].sum+=f[0].flight[i][0],f[i+1].count=1;
for(int i=2; i<=k; i++)
{
memset(v,0,sizeof(v));
for(int j=0; j<n; j++)
if(f[j].count==i-1)
{
for(int l=0; l<n-1; l++)
{
m=i%f[j].d[l]-1;
if(m<0) m+=f[j].d[l];
if(f[j].flight[l][m])
{
if(j<=l) p=l+1;
else p=l;
if(!v[p]||v[p]>f[j].flight[l][m]+f[j].sum) v[p]=f[j].flight[l][m]+f[j].sum;
}
}
}
for(int j=0; j<n; j++) if(v[j]) f[j].sum=v[j],f[j].count=i;
}
printf("Scenario #%d\n",++t);
if(f[n-1].count==k) printf("The best flight costs %d.\n\n",f[n-1].sum);
else printf("No flight possible.\n\n");
}
return 0;
}
590 - Always on the run
最新推荐文章于 2013-11-23 11:39:03 发布