码迷,mamicode.com
首页 > 其他好文 > 详细

UVA1025 城市里的间谍 A Spy in the Metro

时间:2019-03-01 12:15:40      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:using   mem   space   bool   clu   namespace   class   return   memset   

#include<iostream>
#include<cstdio>
#include<memory.h>
using namespace std;
#define min(a,b) (a)<(b)?(a):(b)
#define INF 0x3f3f3f3f
#define N 55
#define M 220
int k,n,T,M1,M2,a,b;
int t[N];
int f[M][N];
bool trn[M][N][2];
int main(){
    for(;~scanf("%d",&n) && n;){
        k++;
        memset(t,0,sizeof(t));
        memset(trn,0,sizeof(trn));
        scanf("%d",&T);
        for(int i=1;i<n;i++)
           scanf("%d",&t[i]);
        scanf("%d",&M1);
        for(int i=1;i<=M1;i++){
            scanf("%d",&a);
            for(int j=1;j<=n;j++){
                trn[a][j][0]=1;
                a+=t[j];
            }
        }
        scanf("%d",&M2);
        for(int i=1;i<=M2;i++){
            scanf("%d",&b);
            for(int j=n;j>=1;j--){
                trn[b][j][1]=1;
                b+=t[j-1];
            }
        }
        for(int i=1;i<n;i++)
            f[T][i]=INF;
        f[T][n]=0;
        for(int i=T-1;i>=0;i--)
            for(int j=1;j<=n;j++){
                f[i][j]=f[i+1][j]+1;
                if(j<n && trn[i][j][0] && i+t[j]<=T)
                    f[i][j]=min(f[i][j],f[i+t[j]][j+1]);
                if(j>1 && trn[i][j][1] && i+t[j-1]<=T)
                    f[i][j]=min(f[i][j],f[i+t[j-1]][j-1]);
            }
        printf("Case Number %d: ",k);
        if(f[0][1]>=INF)
            printf("impossible\n");
        else printf("%d\n",f[0][1]);
    }
    return 0;
}
/*
4
55
5 10 15
4
0 5 10 20
4
0 5 10 15
4
18
1 2 3
5
0 3 6 10 12
6
0 3 5 7 12 15
2
30
20
1
20
7
1 3 5 7 11 13 17
0
*/

UVA1025 城市里的间谍 A Spy in the Metro

标签:using   mem   space   bool   clu   namespace   class   return   memset   

原文地址:https://www.cnblogs.com/pelom/p/10455601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!