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;
    }



  • 相关阅读:
    (三)通用定时器的定时功能(不使用中断)
    (二)STM32中中断优先级理解
    (一)通用定时器的相关介绍
    Ambari client
    Ambari的资源池管理
    Sentry的授权模型
    关于yum
    Ambari-HDP
    Ambari的API调用
    CentOS上面搭建SVN服务器
  • 原文地址:https://www.cnblogs.com/cs1003/p/2692360.html
Copyright © 2011-2022 走看看