当前位置:网站首页>【2022牛客多校5 A题 Don‘t Starve】DP
【2022牛客多校5 A题 Don‘t Starve】DP
2022-08-04 20:44:00 【宇智波一打七~】
题目描述
NIO purchased a new game, Don’t Starve, a sandbox game published by Klei Entertainment Inc. This game revolves around a scientist named Wilson who finds himself in a dark and gloomy world and must survive for as long as possible.
In the very beginning, NIO should help Wilson to gather some food for survival. Assume that when controlling Wilson to walk towards a location on the map, NIO should keep pressing the left button on the mouse, and when Wilson comes to the place where there is food, NIO should stop pressing the mouse, but press the space key on the keyboard to collect the food at this location. As NIO will feel tired of pressing the mouse for a long time and his finger will become very uncomfortable after a long time of pressing, the time he is willing to press the mouse after each collection is strictly decreased. Suppose there are NN locations on the 2-D plane, and at each point, there is only one unit of food. And NIO will start at the original point on the plane. You can assume that each point has an infinite number of food items, but only one can be taken at a time.
What is the maximum amount of food can NIO get for Wilson? Note that the food will be refreshed after Wilson left.
输入输出描述
样例输入
7
-7 21
70 64
45 -52
68 -93
-84 -16
-83 64
76 99
样例输出
4
题意:
给你n个点,每个点都有一个食物,每个点也都有一个坐标,你可以在这些点之间走,每次的距离都必须严格小于上一次的长度,问你最多能吃到多少食物。
思路:
因为数据量是2000,所以每两个点之间的距离能在4e6的时间处理出来,然后这就是2000个点,4e6条边,时间完全ok,然后设状态dp[i]表示从(0,0)点到第i个点的能吃到食物的最多的数量,然后先把所有边按边长从大到小排序,然后从前往后dp就能保证那个距离的递减性,还有一些距离是相等的,需要在dp的时候处理出来与这个距离相同的所有边,然后把里面的值先存起来避免dp的时候把原来的值换掉以后再更新,就发生重复了,相当于环,那么看一下代码吧
#include<bits/stdc++.h>
using namespace std;
const int N = 2010;
#define int long long
#define x first
#define y second
struct node{
int x,y,w,id;
bool operator<(const node&t)const{
return w > t.w;
}
}e[N*N];
typedef pair<int,int> PII;
int dis(PII a,PII b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
PII loc[N];
int f[N*N];
signed main(){
int n,tt=0;
while(scanf("%lld",&n)!=EOF){
tt = 0;
for(int i=1;i<=n;i++){
scanf("%lld%lld",&loc[i].x,&loc[i].y);
e[++tt] = {
i,1,dis(loc[0],loc[i]),1};
f[i] = -1e9;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i != j) e[++tt] = {
i,j,dis(loc[i],loc[j]),0};
sort(e+1,e+1+tt);
for(int i=1;i<=tt;){
int j = i;
queue<PII> q;
while(j<=tt&&e[i].w == e[j].w) j++;
for(int k=i;k<j;k++) if(e[k].id) q.push({
e[k].x,1});
else q.push({
e[k].x,f[e[k].y]+1});
while(q.size()) f[q.front().x] = max(f[q.front().x],q.front().y),q.pop();
i=j;
}
int ans = 0;
for(int i=1;i<=n;i++) ans = max(ans,f[i]);
cout<<ans<<endl;
}
return 0;
}
边栏推荐
- C语言小笔记+题
- 零知识证明笔记——私密交易,pederson,区间证明,所有权证明
- 长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用
- 链路聚合技术及VRRP
- 在vs code中进行本地调试和开启本地服务器
- MySQL stored procedure introduction, creation, case, delete, view "recommended collection"
- 2022年国内手机满意度榜单:华为稳坐国产品牌第一
- Desthiobiotin衍生物Desthiobiotin-PEG4-Amine/Alkyne/Azide/DBCO
- 伺服电机矢量控制原理与仿真(1)控制系统的建立
- 文章复现:超分辨率网络-VDSR
猜你喜欢
手撕SparkSQL五大JOIN的底层机制
CAS :80750-24-9(脱硫生物素 NHS 酯)
Uniapp微信雪糕刺客单页小程序源码
Chrome安装zotero connector 插件
Tear down the underlying mechanism of the five JOINs of SparkSQL
多用户同时远程登录连接到一台服务器
【数据挖掘】搜狐公司数据挖掘工程师笔试题
无代码平台字段设置:基础设置入门教程
How to carry out AI business diagnosis and quickly identify growth points for cost reduction and efficiency improvement?
QT(42)-QT线程-线程调用槽函数
随机推荐
for 循环中的 ++i 与 i++
Getting Started with Lattice Passwords
Apache服务器的配置[通俗易懂]
C语言小笔记+题
【SQL】触发器同步表数据
Zero-knowledge proof - zkSNARK proof system
[AGC] Build Service 1 - Cloud Function Example
adb shell input keyevent 模拟按键事件
五分钟入门文本处理三剑客grep awk sed
DICOM医学影像协议
嵌入式分享合集28
二叉搜索树解决硬木问题
Using Baidu EasyDL to realize forest fire early warning and identification
多用户同时远程登录连接到一台服务器
MySQL stored procedure introduction, creation, case, delete, view "recommended collection"
刷题-洛谷-P1319 压缩技术
How to make good use of builder mode
C#之app.config、exe.config和vshost.exe.config作用区别
搭建MyCat2双主双从的MySQL读写分离
Debug locally and start the local server in vs code