• 紫书 例题 9-1 UVa 1025 ( DAG的动态规划)


    影响到状态的只有时间和在哪个车站(空间),所以可以设f[i][j]是时刻i的时候在第j个车站的最少等待时间


    因为题目中的等待时间显然是在0时刻1车站,所以答案为f[0][1],那么就提醒我们从大推到小,然后可以发现
    d[T][n]一定等于0,所以这个可以作为边界条件。同时时刻0的每一个车站都是正无穷,相当于把i = n的时候
    全部初始化好了。
    然后有三种决策
    (1)在当前车站等一分钟 f[i][j] = f[i+1][j] + 1;
    (2)坐往左开的车 if(j + 1 <= n && i + t[j] <= T && has_train[i][j][0])
                    f[i][j] = min(f[i][j], f[i+t[j]][j+1]);
    (3)坐往右开的车 if(j - 1 >= 1 && i + t[j-1] <= T && has_train[i][j][1])
                    f[i][j] = min(f[i][j], f[i+t[j-1]][j-1]);

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define REP(i, a, b) for(int i = (a); i < (b); i++)
    using namespace std;
    
    const int MAXN = 212;
    int t[MAXN], f[MAXN][MAXN];
    bool has_train[MAXN][MAXN][2];
    
    int main()
    {
    	int n, T, m, d, kase = 0;
    	while(~scanf("%d", &n) && n)
    	{
    		memset(has_train, false, sizeof(has_train));
    		scanf("%d", &T);
    		REP(i, 1, n) scanf("%d", &t[i]);
    		
    		scanf("%d", &m);
    		REP(i, 0, m)
    		{
    			scanf("%d", &d);
    			REP(j, 1, n)
    			{
    				if(d <= T) has_train[d][j][0] = 1;
    				d += t[j];
    			}
    		}
    		
    		scanf("%d", &m);
    		REP(i, 0, m)
    		{
    			scanf("%d", &d);
    			for(int j = n; j >= 2; j--)
    			{
    				if(d <= T) has_train[d][j][1] = 1;
    				d += t[j-1];
    			}
    		}
    		
    		REP(i, 1, n) f[T][i] = 1e9;
    		f[T][n] = 0;
    		
    		for(int i = T - 1; i >= 0; i--)
    			REP(j, 1, n + 1)
    			{
    				f[i][j] = f[i+1][j] + 1;
    				if(j + 1 <= n && i + t[j] <= T && has_train[i][j][0])
    					f[i][j] = min(f[i][j], f[i+t[j]][j+1]);
    				if(j - 1 >= 1 && i + t[j-1] <= T && has_train[i][j][1])
    					f[i][j] = min(f[i][j], f[i+t[j-1]][j-1]);
    			}
    		
    		printf("Case Number %d: ", ++kase);
    		if(f[0][1] >= 1e9) puts("impossible");
    		else printf("%d
    ", f[0][1]);
    	}
    	
    	return 0;
    }
  • 相关阅读:
    SQL 函数:Aggregate、Scalar函数介绍
    SQL 用于各种数据库的数据类型:MySQL、SQLsever
    SQL 通用数据类型解析
    SQL NULL 函数:使用方法及案例剖析
    SpringBoot的配置文件
    SpringBoot简介及快速入门
    本地仓库和远程仓库分支回退到指定的历史版本(idea)
    maven配置阿里云镜像仓库
    SSM三大框架整合-分模块版本
    Java程序调用Oracle存储过程和存储函数
  • 原文地址:https://www.cnblogs.com/sugewud/p/9819461.html
Copyright © 2020-2023  润新知