BZOJ2037 [Sdoi2008] Sue的小球 (费用提前计算相关的DP)
2013-10-05 13:25
387 查看
题目大意:二维坐标系,有n个小球,每个有一个初始坐标,和一个下降速度,沿着y轴负方向以速度v下降,有一个人,初始坐标为 st ,要把中n个球都拿到,他可以沿着x 轴正负方向走,走到这个小球的x 坐标相同时就可以把他得到,得到的分数是 yi - t * vi ,t 为他走到这个小球下方的时刻,人的行走速度为 1格1个单位时间,问你把所有者n个球都拿到的最大分数。
思路:难点和重点就在于每次移动都要把未来会减少的得分计算进来,具体解题思想可以看这篇论文,说的非常好:http://wenku.baidu.com/view/83d0a76925c52cc58bd6bea8
因为之前做过一道修缮长城的题目,和这道题目完全一样,所以这道题目就没有什么难度了,1A的。。 做blocks的时候看到的这篇论文,原来这也是一类型的dp,论文里还有两道,go on!
代码如下:
思路:难点和重点就在于每次移动都要把未来会减少的得分计算进来,具体解题思想可以看这篇论文,说的非常好:http://wenku.baidu.com/view/83d0a76925c52cc58bd6bea8
因为之前做过一道修缮长城的题目,和这道题目完全一样,所以这道题目就没有什么难度了,1A的。。 做blocks的时候看到的这篇论文,原来这也是一类型的dp,论文里还有两道,go on!
代码如下:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int MAXN = 1111; struct Point { int x,y,v; bool operator < (const Point &tmp) const { return x < tmp.x; } } p[MAXN]; int sum[MAXN]; int d[MAXN][MAXN][2]; int main() { int n,st; while(~scanf("%d%d",&n,&st)) { for(int i = 1;i<=n;i++) scanf("%d",&p[i].x); for(int i = 1;i<=n;i++) scanf("%d",&p[i].y); for(int i = 1;i<=n ;i++) scanf("%d",&p[i].v); sort(p+1,p+1+n); sum[0] = 0; for(int i = 1;i<=n;i++) sum[i] = sum[i-1] + p[i].v; for(int i = 1;i<=n;i++) { d[i][i][0] = d[i][i][1] = p[i].y - abs(p[i].x - st)*sum ; } for(int len = 2;len<=n;len++) { for(int i = 1;i<=n;i++) { int j = i + len - 1; if(j > n) break; d[i][j][0] = max(d[i+1][j][0] + p[i].y - abs(p[i].x-p[i+1].x)*(sum[i] + sum - sum[j]), d[i+1][j][1] + p[i].y - abs(p[i].x-p[j].x)*(sum[i] + sum - sum[j])); d[i][j][1] = max(d[i][j-1][0] + p[j].y - abs(p[j].x-p[i].x)*(sum[i-1] + sum - sum[j-1]), d[i][j-1][1] + p[j].y - abs(p[j].x-p[j-1].x)*(sum[i-1] + sum - sum[j-1])); } } printf("%.3f\n",max(d[1] [0],d[1] [1])/1000.0); } return 0; }
相关文章推荐
- 【SDOI2008】【BZOJ】【P2037】【Sue的小球】【题解】【费用提前计算相关的DP】
- 【SDOI2008】【BZOJ】【P2037】【Sue的小球】【题解】【费用提前计算相关的DP】
- 【BZOJ2037】[Sdoi2008]Sue的小球 区间DP+费用提前
- 费用提前计算相关的DP(BZOJ2037,POJ3042,ZOJ3469)
- [bzoj2037][Sdoi2008]Sue的小球 基于未来状态的动态规划
- spoj 1526 (BOI2007 day1) (费用提前计算相关的DP)
- bzoj 2037: [Sdoi2008]Sue的小球——dp
- BZOJ 2037: [Sdoi2008]Sue的小球(DP)
- BZOJ2037: [Sdoi2008]Sue的小球
- Bzoj2037 [Sdoi2008]Sue的小球
- POJ 3042 区间DP(费用提前计算相关的DP)
- POJ 3042 区间DP(费用提前计算相关的DP)
- BZOJ 2037 [Sdoi2008]Sue的小球 DP
- Bzoj2037: [Sdoi2008]Sue的小球
- bzoj2037 [Sdoi2008]Sue的小球
- Bzoj2037: [Sdoi2008]Sue的小球
- BZOJ 2037 [Sdoi2008]Sue的小球
- [SDOI2008]Sue的小球
- bzoj 2037: [Sdoi2008]Sue的小球
- 2037: [Sdoi2008]Sue的小球