P5017 摆渡车

Posted for-miku

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于P5017 摆渡车的主要内容,如果未能解决你的问题,请参考以下文章

P5017 摆渡车

DP从入土到入门

摆渡车(线性dp)

摆渡车

摆渡车

[Noip2018普及]摆渡车