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



  • 相关阅读:
    线性回归算法
    K均值算法--应用
    K均值算法
    机器学习相关数学基础
    机器学习概述
    语法制导的语义翻译
    算符优先分析
    自下而上语法分析
    实验二 递归下降语法分析
    LL(1)文法的判断
  • 原文地址:https://www.cnblogs.com/cs1003/p/2692360.html
Copyright © 2011-2022 走看看