zoukankan      html  css  js  c++  java
  • poj2336

    题目大意:一个船要把n个车渡过河  船最多载m辆车  把车运过去需要t的时间 回来也要t的时间

    给定n辆车依次到河边的时间 求最短运送时间  还有最短跑几趟

    一维dp  可以直接d运送时间

    dp[i]=min{max(time[i],dp[j]+t)+t} (i-n=<j<i)

    time[i]表示第i辆车到达时间,trip[i]表示第i辆车最少几趟

    trip[i]=min{trip[j]}+1

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    const int maxn=2000;
    int dp[maxn],trip[maxn],tim[maxn],n,t,m,i,j;
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            cin>>n>>t>>m;
            memset(dp,0xff,sizeof(dp));
            memset(trip,0,sizeof(trip));
            for(int i=1;i<=m;i++)cin>>tim[i];
            dp[0]=-t;
            dp[1]=tim[1]+t;
            trip[1]=1;
            for(i=2;i<=m;i++)
            {
                for(j=max(0,i-n);j<i;j++)
                {
                    int tmp=max(dp[j]+t,tim[i])+t;
                    if(dp[i]==-1)
                    {
                        dp[i]=tmp;
                        trip[i]=trip[j]+1;
                        continue;
                    }
                    if(tmp<dp[i])
                    {
                        dp[i]=tmp;
                        trip[i]=trip[j]+1;
                    }
                }
            }
            cout<<dp[m]<<" "<<trip[m]<<'
    ';
        }
        //system("pause");
        return 0;
    }
    View Code
  • 相关阅读:
    双指针算法_最长连续不重复子列长度
    前缀和_子矩阵的和
    前缀和
    高精度算法_大数除以小数
    高精度算法_大数乘小数
    高精度算法_大数相减
    高精度算法_大数加法
    一维差分矩阵
    二维差分矩阵
    整数二分
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7111597.html
Copyright © 2011-2022 走看看