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
--------------------------------------------
记忆化搜索,快捷易懂,可以挑战DP
以上是关于P5017 摆渡车的主要内容,如果未能解决你的问题,请参考以下文章