zoukankan      html  css  js  c++  java
  • P5017 摆渡车

    链接:P5017

    -----------------------------------------

    看见了动态规划不会怎么办?

    搜索,剪枝,记忆化!

    cz就是巨啊)

    --------------------------------------------

    记忆化搜索,搜索第i个人上车后的下一班车的出发时间

    数组的二维是第i个人的等待时间。

    ---------------------------------------------

    Orzcz

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 
     7 using namespace std;
     8 int n,m,t[505],men[505][505];
     9 int solve(int i,int start){//接到了第i个人后 
    10     if(i==n+1)
    11     return 0;
    12     if(start<t[i])//没人?就等等人 
    13     return solve(i,t[i]);
    14     if(men[i][start-t[i]])
    15         return men[i][start-t[i]];
    16     int sum=0;
    17     int j=i;
    18     while(j<=n&&t[j]<=start)
    19         sum+=t[j++];
    20         int best =start *(j-i)-sum+solve(j,start+m);//把这班车的出发前的
    21         //人都接上,然后计算新添的等待时间和这班车回来后 
    22     for(;j<=n;++j){
    23         sum+=t[j];//计算如果这班车继续等,然后刚好接走第j+1个人 
    24         best = min(t[j]*(j-i+1)-sum+solve(j+1,t[j]+m),best);
    25     }    
    26     return men[i][start-t[i]]=best;//返回 
    27 }    
    28 int main(){
    29     scanf("%d%d",&n,&m);
    30     for(int i=1;i<=n;++i){
    31         scanf("%d",&t[i]); 
    32     }
    33             sort(t+1,t+n+1);
    34     printf("%d",solve(1,0));
    35     return 0;
    36 }
    AC

    --------------------------------------------

    记忆化搜索,快捷易懂,可以挑战DP

  • 相关阅读:
    【leetcode刷题笔记】Best Time to Buy and Sell Stock II
    【leetcode刷题笔记】Reverse Integer
    JAVA中的NIO(二)
    标准I/O
    margin的理解
    JAVA中的NIO(一)
    IO模型
    linux网络命令
    linux用户管理命令
    linux中的帮助命令
  • 原文地址:https://www.cnblogs.com/For-Miku/p/11268390.html
Copyright © 2011-2022 走看看