zoukankan      html  css  js  c++  java
  • FJUT第四周寒假作业[JL]最后的晚餐(动态规划)

    题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=163#P4

    [JL]最后的晚餐

    TimeLimit:1000MS  MemoryLimit:1000KB
    64-bit integer IO format:%lld
     
    Problem Description

    【题库搜索“JL”查看更多建兰题库题目】

    话说YZJ编的某程序超时了1000倍(- -!),所以他不得不在自己家门口亲眼见证这个电影般的场景。虽然他不想错过这个美妙的时刻,但是他的肚子一再抗议,要求先吃完这最后的晚餐。

    现在YZJ准备依次吃n道菜。但是他只使用勺子和筷子吃,勺子和筷子可以交替使用,但是同一种菜只能用一种餐具,在开饭前他拿的是筷子。用勺子和筷子吃第i道菜的时间分别是a_i和b_i。吃第i道菜之前筷子和勺子交换的时间为c_i。

    现在请你告诉ABC按他的计划依次吃完这n道菜,最小需要多少时间。

    Input

    第一行,一个正整数n(1<=n<=100)

    以下n行,分别是三个正整数a_i,b_i,c_i(1<=a_i,b_i,c_i<=30000)

    数据范围及提示:

    所有其他输入<=30000 N<=20

    Output

    一个数,最短时间

    SampleInput

    3

    20 40 20

    10 4 25

    90 100 5

    SampleOutput

    139

    题意很简单,dp的题找到初始状态和状态转移方程就分分钟A了。

    进入DP的思维,试图用dp[i]表示第i道菜的最短时间。寻找初始状态,那么dp[0]肯定是要特殊求的。然后寻找状态转移方程。

    但是从案例发现,dp[i]并不能表示状态,第一道菜不论是勺子还是筷子吃都是40min,那么就增加一维数组表示状态。最后用dp[][2]表示状态

    dp[i][0]表示吃到第i道菜用勺子吃的最短总时间,dp[i][1]表示吃到第i道菜用筷子吃的最短总时间。

    那么初始状态,dp[0][0]=a+c,dp[0][1]=b.

    接下来吃每道菜的时间是上一状态下,四种选择后的最短时间(原来是勺子,换与不换两种;原来是筷子,换与不换两种)。于是状态转移方程。

    最后答案。

    
    
    
    
    
  • 相关阅读:
    Oracle第五周测验
    软件测试第五周
    Oracle第四周作业
    c++第二章测试
    软件测试第四章
    软件测试 第三章
    Centos 安装.NET Core环境
    .net core 集成极光推送
    Swagger添加文件上传测试
    linux firewall
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/6372051.html
Copyright © 2011-2022 走看看