[SDOI2008]SUE的小球

[SDOI2008]SUE的小球

文章目录

    • 题目描述
    • 题解:
    • 代码:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船。然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一个秘密武器,只要她将小船划到一个彩蛋的正下方,然后使用秘密武器便可以在瞬间收集到这个彩蛋。然而,彩蛋有一个魅力值,这个魅力值会随着彩蛋在空中降落的时间而降低,Sue要想得到更多的分数,必须尽量在魅力值高的时候收集这个彩蛋,而如果一个彩蛋掉入海中,它的魅力值将会变成一个负数,但这并不影响Sue的兴趣,因为每一个彩蛋都是不同的,Sue希望收集到所有的彩蛋。
然而Sandy就没有Sue那么浪漫了,Sandy希望得到尽可能多的分数,为了解决这个问题,他先将这个游戏抽象成了如下模型:
以Sue的初始位置所在水平面作为x轴。 一开始空中有N个彩蛋,对于第i个彩蛋,他的初始位置用整数坐标(xi,
yi)表示,游戏开始后,它匀速沿y轴负方向下落,速度为vi单位距离/单位时间。Sue的初始位置为(x0,
0),Sue可以沿x轴的正方向或负方向移动,Sue的移动速度是1单位距离/单位时间,使用秘密武器得到一个彩蛋是瞬间的,得分为当前彩蛋的y坐标的千分之一。
现在,Sue和Sandy请你来帮忙,为了满足Sue和Sandy各自的目标,你决定在收集到所有彩蛋的基础上,得到的分数最高。

输入描述:

第一行为两个整数N, x0用一个空格分隔,表示彩蛋个数与Sue的初始位置。
第二行为N个整数xi,每两个数用一个空格分隔,第i个数表示第i个彩蛋的初始横坐标。
第三行为N个整数yi,每两个数用一个空格分隔,第i个数表示第i个彩蛋的初始纵坐标。
第四行为N个整数vi,每两个数用一个空格分隔,第i个数表示第i个彩蛋匀速沿y轴负方向下落的的速度。

输出描述:

一个实数,保留三位小数,为收集所有彩蛋的基础上,可以得到最高的分数。

示例1
输入
复制
3 0
-4 -2 2
22 30 26
1 9 8
输出
复制
0.000
备注:
数据范围:
N < = 1000,对于100%的数据。 -10^4 < = xi,yi,vi < = 10^4

题解:

当我们在移动时,所有彩蛋都是在下落的,那我们就可以求出彩蛋的高度和,以及彩蛋的速度和,每过一秒就减去速度乘时间
这算是费用提前计算的dp
我们可以向左或向右走,但是尽量不要来回走,这样会造成浪费
所以我们定义dp[i][j][0/1]
dp[i][j][0]表示向左走过区间[i,j],并停留在i位置上
dp[i][j][1]表示向右走过区间[i,j],并停留在j位置上

我们先分析dp[i][j][0],
能影响的有四个dp[i+1][j][0],dp[i+1][j][1],dp[i][j-1][0],dp[i][j-1][1],
不过后两者虚无考虑,因为转移的时候不需要"折返跑",已经到了j位置,再回去到i,多走了路

1.dp[i+1][j][0]–>dp[i][j][0],从i+1到i,走过的路是abs(x[i+1]-x[1]).在走区间[i,i+1]时,其它位置的小球都在下落,所以要提前算好这些下落小球的距离,abs(x[i+1]-x[i])*下落小球的速度之和

dp[i][j][0]=in[i].y+max(dp[i+1][j][0]-abs(in[i+1].x-in[i].x)*sumv1,dp[i+1][j][1]-abs(in[j].x-in[i].x)*sumv1);

2.dp[i+1][j][1]–>dp[i][j][0],从j走到i位置,大体和上面一致

	dp[i][j][1]=in[j].y+max(dp[i][j-1][0]-abs(in[j].x-in[i].x)*sumv2,dp[i][j-1][1]-abs(in[j].x-in[j-1].x)*sumv2);

dp[i][j][1]也是如此

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define maxn 1050
using namespace std;
struct node{int x,y,v;bool operator<(const node &a)const{return x<a.x;}
}in[maxn];
int dp[maxn][maxn][2],n;
int get(int a,int b){return (in[n].v-in[b].v+in[a-1].v);//计算区间[a,b]之外的小球速度之和
}
int main(){int m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&in[i].x);for(int i=1;i<=n;i++)scanf("%d",&in[i].y);for(int i=1;i<=n;i++)scanf("%d",&in[i].v);sort(in+1,in+n+1);for(int i=1;i<=n;i++)in[i].v+=in[i-1].v;for(int i=1;i<=n;i++){dp[i][i][0]=in[i].y-abs(in[i].x-m)*in[n].v;dp[i][i][1]=dp[i][i][0];}for(int k=2;k<=n;k++)for(int i=1;i<=n-k+1;i++){int j=i+k-1;int sumv1=get(i+1,j),sumv2=get(i,j-1);dp[i][j][0]=in[i].y+max(dp[i+1][j][0]-abs(in[i+1].x-in[i].x)*sumv1,dp[i+1][j][1]-abs(in[j].x-in[i].x)*sumv1);dp[i][j][1]=in[j].y+max(dp[i][j-1][0]-abs(in[j].x-in[i].x)*sumv2,dp[i][j-1][1]-abs(in[j].x-in[j-1].x)*sumv2);}printf("%.3lf",max(dp[1][n][0],dp[1][n][1])*0.001);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #661 (Div. 3)

A - Remove Smallest 排个序&#xff0c;如果相邻的数大于一就不满足题意 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<alg…

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用。当然&#xff0c;在真实的产线环境中需要分析的数据和难度远远高于demo所示&#xff0c;所以demo的作用也仅仅只能起到介绍工具的作用。通常正常情况下&#xff0c;分析个几天才能得出一个结论的的结果都还是比较…

P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出A,B,dA,B,dA,B,d求有多少对(a,b)(a,b)(a,b)满足gcd(a,b)dgcd(a,b)dgcd(a,b)d且a∈[1,A],b∈[1,B]a\in[1,A],b\in[1,B]a∈[1,A],b∈[1,B] 解题思路 很显然的…

【Trie】最大异或对(ybtoj Trie-2)

正题 ybtoj Trie-2 题目大意 给你n个数&#xff0c;选择2个&#xff0c;使其异或值最大 解题思路 对于每个数的二进制建立Trie&#xff0c;然后每个数在Trie中搜索&#xff0c;每次尽量走不同方向 代码 #include<cstdio> #include<cstring> #include<iostrea…

[SCOI2003]字符串折叠

[SCOI2003]字符串折叠 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 折叠的定义如下&#xff1a; 一个字符串可以看成它自身的折叠。记作S S X(S)是X(X>1)个S连接在一…

Codeforces Round #662 (Div. 2)

就写了两个题&#xff0c;以为要掉分&#xff0c;结果早上起来发现还上分了&#xff08;说明wtcl A - Rainbow Dash, Fluttershy and Chess Coloring 无论边长是奇数还是偶数&#xff0c;考虑每次操作最外层的一圈&#xff0c;一个人操作一圈的一般&#xff0c;然后另一个人就…

.NET微服务方案调查

.NET Core就是专门针对模块化的微服务架构而设计&#xff0c;调查下大家选择.NET微服务情况&#xff0c;如果你有微服务方面的需求可以找我哦&#xff0c;可加我微信geffzhang&#xff1a;相关文章&#xff1a;Service Fabric 与Ocelot 的集成Ocelot简易教程&#xff08;二&…

Loj#116-[模板]有源汇有上下界最大流

正题 题目链接:https://loj.ac/p/116 题目大意 nnn个点mmm条边的一张图&#xff0c;每条边有流量上下限制&#xff0c;求源点到汇点的最大流。 解题思路 先别急着求上面那个&#xff0c;考虑一下怎么求无源点汇点的上下界可行流。 可以考虑先把下限流满&#xff0c;这样就会…

【Trie】最长异或路径(ybtoj Trie-3/luogu 4551)

正题 ybtoj Trie-3 luogu 4551 题目大意 给你一棵树&#xff0c;让你找一条路径&#xff0c;使这条路径的亦或值最大 解题思路 对于每个数存下到根节点的亦或值&#xff0c;然后拿这些数去Trie中跑最大亦或 因为相同部分亦或后为0&#xff0c;所以得出结果就是最大路径亦或…

Codeforces Round #663 (Div. 2)

2020/8/9晚上断网了&#xff0c;本来不想打就顺便看看题目&#xff0c;发现能做几个&#xff0c;然后就交了。&#xff08;做完1、2两题才敢交&#xff09;最终做了3个题tcl。 A - Suborrays 脑筋急转弯题目。位运算OR运算结果只会变大不会变小&#xff0c;直接正序输出就可 …

【每日一题】7月16日题目精讲—点权和

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 给你一棵树&#xff0c;最开始点权为0&#xff0c;每次将与一个点x树上距离<1的所…

中国开源年会 COSCon 2018 今起接受报名!

大会官网二维码名片&#xff1a;点击文末左下角阅读原文&#xff0c;直达报名链接写在大会前开源 20 年&#xff0c;我们遇到了什么问题&#xff1f;‍围绕开源的方式来开发软件项目&#xff0c;正在走向业界的主流。随着开源的崛起&#xff0c;相应的问题也来了&#xff1a;Re…

【Trie】阅读理解(luogu 3879/ybtoj Trie-4)

正题 luogu 3879 ybtoj Trie-4 题目大意 给你n篇文章&#xff0c;还有m个单词&#xff0c;问你这些单词在哪几篇文章中出现过 解题思路 对文章中的单词建Trie&#xff0c;然后那查询的单词去匹配 代码 #include<map> #include<vector> #include<cstdio> …

P6222-「P6156 简单题」加强版【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P6222 题目大意 给出kkk&#xff0c;TTT组询问给出nnn求 ∑i1n∑j1n(ij)kgcd(i,j)μ(gcd(i,j))2\sum_{i1}^n\sum_{j1}^n(ij)^k\times gcd(i,j)\times \mu(gcd(i,j))^2i1∑n​j1∑n​(ij)kgcd(i,j)μ(gcd(i,j))2 解题思路 开…

Codeforces Round #664 (Div. 2)

写了三个题结果C fst了O.0 A - Boboniu Likes to Color Balls 回文串&#xff0c;最多有球是一个奇数个。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<cstdio> #include<iostream> #include<algorithm> using namespace std…

2020 年百度之星·程序设计大赛 - 初赛一

2020 年百度之星程序设计大赛 - 初赛一 [toc] 6743 Drink 题解&#xff1a; 每一种饮料求一个卡路里&#xff0c;取最小值 第一看以为是背包&#xff0c;其实出题人在第二层 代码&#xff1a; #include<iostream> #include<cstdio> #include<string> #i…

.Net Core应用框架Util介绍(四)

上篇介绍了Util Angular Demo的目录结构和运行机制&#xff0c;本文介绍Util封装Angular的基本手法及背后的动机。Angular应用由Ts和Html两部分构成&#xff0c;本文介绍第一部分。Angular Ts的封装Ts是Angular的代码部分&#xff0c;用于编写页面逻辑。依赖注入( Dependency I…

【AC自动机】AC自动机(二次加强版)(luogu 5357)

正题 luogu 5357 题目大意 给你若干单词和一个字符串&#xff0c;让你查询每个单词在字符串中出现的次数 解题思路 AC自动机模板 先把单词丢进去&#xff0c;然后拿字符串去跑&#xff0c;每到一个点累计答案 因为数据较大&#xff0c;所以要先存起来&#xff0c;跑完后按…

Educational Codeforces Round 93 (Rated for Div. 2)

A - Bad Triangle 选出三个序列使之不能组成三角形。先把差距最大的选了&#xff0c;枚举中间值。两边之和不大于第三边。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; const i…

P4198-楼房重建【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P4198 题目大意 nnn条线&#xff0c;开始时第iii条是(i,0)(i,0)(i,0)的一个点。 每次有操作把第xxx条线变成(x,0)(x,0)(x,0)到(x,y)(x,y)(x,y)。然后求从(0,0)(0,0)(0,0)能看到几条线。 解题思路 把线变成斜率的话就是对于每…