zoukankan      html  css  js  c++  java
  • Day2

    Day2

    UVA 1025 二维DP

    题面

    ​ 【题目大意】某城市地铁是线性的,有n(2≤n≤50)个车站,从左到右编号1~n。有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开。列车在相邻站台间所需的运行时间是固定的,因为所有列车的运行速度是相同的。在时刻0,Mario从第1站出发,目的在时刻T(0≤T≤200)会见车站n的一个间谍。在车站等车时容易被抓,所以她决定尽量躲在开动的火车上,让在车站等待的时间尽量短。列车靠站停车时间忽略不计,且Mario身手敏捷,即时两辆方向不同的列车在同一时间靠站,Mario也能完成换乘。 【输入格式】 输入文件包含数种情况,每一种情况包含以下7行:

    第一行是一个正整数n,表示有n个车站 第二行是为T,表示Mario在时刻T见车站n的间谍 第三行有n-1个整数t1,t2,...,tn-1,其中ti表示地铁从车站i到i+1的行驶时间 第四行为M1,及从第一站出发向右开的列车数目 第五行包含M1个正整数a1,a2,...,aM1,即个列车出发的时间 第六行为M2,及从第一站出发向右开的列车数目 第七行包含M2个正整数b1,b2,...,bM2,即个列车出发的时间

    最后一种情况以一行0结尾。

    思路:

    状态设计:dp[i][j] 表示人在i时刻在j站,所需要的等待时间

    转移方程:dp[i][j] = min {dp[i+1][j]+1,dp[i+t[j+1]][j],dp[i+t[j-1]][j-1]},t[i]表示从i站到i+1站所需时间

    DP代码:

    	for(int i=tt-1;i>=0;i--)
    		for(int j=n;j>=1;j--)
            {	
                dp[i][j]= dp[i+1][j]+1;
                if(i + t[j] < tt && j < n && has_car1(i,j))
                    dp[i][j] = min(dp[i+t[j]][j+1],dp[i][j]);
                if(i + t[j-1]< tt && j > 1 && has_car2(i,j))
                    dp[i][j] = min(dp[i+t[j-1]][j-1],dp[i][j]);
            }
    
    

    今天写这道题的时候,感觉不能只把DP方程写出来就以为完事了,边界条件初始化、转移的时候一些条件的判断都是十分重要的。

    UVA 437 DAG上的DP

    题面

    巴比伦人有n种长方形方块,每种有无限个,第i种方块的三边边长是xi,yi,zi,要求选一些立方体竖成一根尽量高的柱子,使得每个立方体的底面面积严格小于它下面的那个立方体底面面积

    思路:

    状态设计:dp(i,j)表示编号为i,高为j的立方体,在底面所能堆成的最高高度。

    转移方程:dp[i][j] = max{dp[x][y]} + v[i]/j,

    由于摆法不同,实际上这里一共是3n个方块

    解法1: 通过记忆化搜索直接解。

    解法2:排序之后,使用递推。

    解法3:3N个方块,拓扑排序,然后遍历拓扑序来更新。

    //今天真是糟糕的一天啊....

  • 相关阅读:
    【分享】浅析Quora的技术架构 狼人:
    【观点】在苹果公司学到的编程技巧 狼人:
    【观点】工作效率上的错觉 狼人:
    提高编程技巧的十大方法 狼人:
    微软推出IE10第二个平台预览版 狼人:
    读取文件将 Excel 文件 转换成 CSV 文件 解决方案
    组合生成组合的生成之生成下一个组合 By ACReaper
    二叉树遍历二叉树的实现及先序、中序、后序遍历
    图片切换[置顶] 送大家几款可以运用到实际项目的flash+xml控件
    动画效果程序员的最高境界就是能够参加全球DEMO大赛
  • 原文地址:https://www.cnblogs.com/backkom-buaa/p/11456258.html
Copyright © 2011-2022 走看看