当前位置:网站首页>【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;
}
边栏推荐
- 阿里的arthas使用,入门报错:Unable to attach to 32-bit process running under WOW64
- 新式茶饮,卷完水果还能卷什么?
- vs Code 运行一个本地WEB服务器
- MySQL stored procedure introduction, creation, case, delete, view "recommended collection"
- C#移动OA办公系统源码(基于微信企业号)
- 知识分享|如何设计有效的帮助中心,不妨来看看以下几点
- EasyUi常用代码
- Qt Designer生成的图形可以自适应窗口的大小变化
- How to train a deep learning model?
- Big capital has begun to flee the crypto space?
猜你喜欢

阿里的arthas使用,入门报错:Unable to attach to 32-bit process running under WOW64

面试官:Redis中过期的key是怎么被删除的?

无代码平台字段设置:基础设置入门教程

刷题-洛谷-P1307 数字反转

拒绝服务攻击DDoS介绍与防范

MATLAB中readtimetable函数用法

多用户同时远程登录连接到一台服务器

Zero-knowledge proof notes - private transaction, pederson, interval proof, proof of ownership

Using Baidu EasyDL to realize forest fire early warning and identification

Chrome安装zotero connector 插件
随机推荐
STP基本配置及802.1D生成树协议的改进
2、字符集-编码-解码
KubeSphere简介,功能介绍,优势,架构说明及应用场景
刷题-洛谷-P1200 你的飞碟在这儿Your Ride Is Here
QT(42)-QT线程-线程调用槽函数
DICOM医学影像协议
C#移动OA办公系统源码(基于微信企业号)
Oreo domain name authorization verification system v1.0.6 public open source version website source code
某男子因用本地虚拟机做压测,惨遭字节面试官当场嘲笑
【随记】新一天搬砖 --20220727
【SQL】触发器同步表数据
win10 uwp 使用 ScaleTransform 放大某个元素
大资本已开始逃离加密领域?
Using Baidu EasyDL to realize forest fire early warning and identification
五分钟入门文本处理三剑客grep awk sed
After the tester with 10 years of service "naked resignation" from the big factory...
实现菜单拖拽排序
web漏洞扫描器-awvs
常用正则表达式[通俗易懂]
C语言之实现扫雷小游戏