zoukankan      html  css  js  c++  java
  • zoj 2972 Hurdles of 110m

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2972

    一开始以为是那种类似加血的题目,但是这个题和加血的有个区别就是,是每一段有一个速度值,表示成加血的那样的状态有点复杂。

    所以,表示成简单一点的

    dp[i][j]表示到达第i段还剩j的force。

    所以显然根据题目所说的:

    有状态转移方程:

    dp[i][j]=min(dp[i-1][j]+t2,dp[i][j]); 

    if(j>=f1)
    dp[i][j-f1]=min(dp[i-1][j]+t1,dp[i][j-f1]);
    int temp=j+f2;
    if(temp>m)temp=m;
    dp[i][temp]=min(dp[i][temp],dp[i-1][j]+t3);

    View Code
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<stdio.h>
    #define maxn 200
    using namespace std;
    const int inf=10000;
    int dp[maxn][maxn];
    int main()
    {
        int test;
        int n,m;
        int t1,t2,t3,f1,f2;
        for(cin>>test;test;test--)
        {
            cin>>n>>m;
            fill(dp[0],dp[n+1],inf);//fill函数要注意
            dp[0][m]=0;
            for(int i=1;i<=n;i++)
            {
                cin>>t1>>t2>>t3>>f1>>f2;
                for(int j=m;j>=0;j--)
                {
                    dp[i][j]=min(dp[i-1][j]+t2,dp[i][j]);//普通方式走
                    if(j>=f1)
     dp[i][j-f1]=min(dp[i-1][j]+t1,dp[i][j-f1]);//力气够,最大速度走
                    int temp=j+f2;
                    if(temp>m)temp=m;//不能超过最大值
             dp[i][temp]=min(dp[i][temp],dp[i-1][j]+t3);//最慢力气走
                }
            }
     cout<<*min_element(dp[n],dp[n]+m+1)<<endl;//这个函数要注意
        }
        return 0;
    }



  • 相关阅读:
    鼠标单击事件( onclick )
    什么是事件《js》
    作业
    javaben的设计规则
    cookie的相关方法
    cookie 基本用法
    include 指令与动作区别
    简单的购物车应用案例 相关代码4
    简单的购物车应用案例 相关代码3
    iOS UI 布局
  • 原文地址:https://www.cnblogs.com/cs1003/p/2692360.html
Copyright © 2011-2022 走看看