zoukankan      html  css  js  c++  java
  • HDU 1494 跑跑卡丁车 (DP)

    题目链接

    题意 : 中文题不详述。

    思路 : sum = L*N 段,每走过一段如果不用加速卡的话,能量会增20%,将20%看作1,也就是说每涨到15就要变为10,所以最多是14才不浪费。

    dp[i][j]代表第 i 段路需要能量是 j 的最少时间。状态转移方程是

    //不用能量卡的时候
    dp[i][j+1] = min(dp[i-1][j]+a[(i-1)%L],dp[i][j+1]) ;
    //用能量卡的时候,用完了之后能量卡减5
    dp[i][j-5] = min(dp[i][j-5],dp[i-1][j]+b[(i-1)%L]) ;

    //HDU 1494
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    
    using namespace std ;
    
    int a[110],b[110] ;
    int dp[11000][20] ;
    const int INF = 999999999 ;
    
    int main()
    {
        int L ,N ;
        while(~scanf("%d %d",&L,&N))
        {
            for(int i = 0 ; i < L ; i ++)
                scanf("%d",&a[i]) ;
            for(int i = 0 ; i < L ; i++)
                scanf("%d",&b[i]) ;
            int sum = L*N ;
            for(int i = 0 ; i <= sum ; i++)
                for(int j = 0  ; j  <= 15 ; j++)
                    dp[i][j] = INF ;
            dp[0][0] = 0 ;
            for(int i = 1 ; i <= sum ; i++)
            {
                for(int j = 14 ; j >= 0 ; j --)//不用能量卡的时候
                    dp[i][j+1] = min(dp[i-1][j]+a[(i-1)%L],dp[i][j+1]) ;
                for(int j = 14 ; j >= 5 ; j--)//用能量卡的时候,用完了之后能量卡减5
                    dp[i][j-5] = min(dp[i][j-5],dp[i-1][j]+b[(i-1)%L]) ;
                dp[i][10] = min(dp[i][10],dp[i][15] ) ;//每次满15之后都要变成10
            }
            int minn = INF ;
            for(int i = 0 ; i < 15 ; i++)
                minn = min(minn,dp[sum][i]) ;
            printf("%d
    ",minn) ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    spring + junit 测试
    备份mysql数据库
    JAVA访问Zabbix API
    pro git 读书笔记 3 Git 分支
    pro git 读书笔记 1
    pro git 读书笔记 2
    溢出和剪裁,可见性
    html 与 jsp 文件格式区别
    Eclipse 的 CheckStyle 插件
    【转】单元测试覆盖率
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3652826.html
Copyright © 2011-2022 走看看