zoukankan      html  css  js  c++  java
  • zju 2972 Hurdles of 110m(简单的dp)

    题目

    简单的dp,但是我还是参考了网上的思路,具体我没考虑到的地方见代码

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define inf 2100000000
    //int min(int a,int b)
    //{
    //    return a<b? a:b;
    //}
    int main()
    {
        int t,i,j,n,m;
        int t1,t2,t3,f1,f2;
        int dp[310][310];
        int ans;
    
        scanf("%d",&t);
        while(t--) 
        {
            scanf("%d%d",&n,&m);
            for(i=0;i<=300;i++)
            {
                for(j=0;j<=300;j++)
                {
                    dp[i][j]=inf;
                }
            }
            dp[0][m]=0;
            
            for(i=1;i<=n;i++)
            {
                scanf("%d%d%d%d%d",&t1,&t2,&t3,&f1,&f2);
                for(j=0;j<=m;j++)
                {
                    if(j-f1>=0)
                        dp[i][j-f1]=min(dp[i][j-f1],dp[i-1][j]+t1);
                    dp[i][j]=min(dp[i][j],dp[i-1][j]+t2);
                    
                    //原来是这个处理有问题,因为最大能量不能大于m,所以凡是能量大于m的,都算在等于m里面
                    //if(j+f2<=m)
                    //        dp[i][j+f2]=min(dp[i][j+f2],dp[i-1][j]+t3);
                    int temp=(j+f2)>m? m:(j+f2);
                    dp[i][temp]=min(dp[i][temp],dp[i-1][j]+t3);
                
                }
            }
            ans=inf;
            for(i=0;i<=m;i++)
            {
                ans=ans<dp[n][i]? ans:dp[n][i];
            }
    
            printf("%d
    ",ans);
        }
        return 0;
    }
    //dp[i][j],到达i点剩余体力为j的最快时间
    View Code

    ps:dp,我要攻下你!

    一道又一道,好高兴!
  • 相关阅读:
    SVG平移和缩放(鼠标滚轮)的实现
    CSS之容器水平垂直居中
    CSS之flex布局
    CSS之鼠标悬停——内容变深/变浅
    CSS之clip-path绘制多边形
    axios
    .Net 反射
    Redis
    .Net Core GRPC报错
    Python 京东云无线宝消息推送
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3651044.html
Copyright © 2011-2022 走看看