A题: Don’t Starve

原题链接:https://ac.nowcoder.com/acm/contest/33190/A

题目大意

在二维平面上,有 n(1≤n≤2000)n(1\le n\le 2000)n(1≤n≤2000) 个位置有食物。从原点出发,每次直线前往其他任意一个有食物的位置收集食物。收集完后再次前往下一个点。每当离开一个有食物的点后,该点的食物就会刷新。并且每次的移动距离必须严格递减。

题解

称食物点间的距离为边权。
为了方便处理 初始从原点开始 这个条件,我们可以考虑反向进行 dpdpdp 。
设状态 dpxdp_xdpx​ 表示从点 xxx 出发后能达到的最多食物点数,因为是反向 dpdpdp ,我们按边权从小到大枚举边进行转移,这样可以保证每次向前转移时,后面的边权一定是比当前边小的。
转移式显然:
dpx=dpy+1dp_x=dp_y+1dpx​=dpy​+1

注意点

对于相同边权的边,平行进行处理(可以将更新后的值存入一个缓存数组,待相同边权全部转移后再更新),防止出现转移时前后边权相同(非严格递减)的情况。
存边权时直接使用 (xi−xj)2+(yi−yj)2(x_i-x_j)^2+(y_i-y_j)^2(xi​−xj​)2+(yi​−yj​)2 代替即可,不需要开方,防止出现精度误差。

参考代码

#include<bits/stdc++.h>
using namespace std;template<class T>inline void read(T&x){//快读char c,last=' ';while(!isdigit(c=getchar()))last=c;x=c^48;while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+(c^48);if(last=='-')x=-x;
}#define ll long long
const int MAXN=2e3+5;
int n,m;
ll x[MAXN],y[MAXN];
int f[MAXN],g[MAXN];
struct node{int u,v;ll w;node(int U,int V,ll W):u(U),v(V),w(W){}
};
vector<node>e;bool cmp(node a,node b){return a.w<b.w;}inline ll d(int u,int v){return (x[u]-x[v])*(x[u]-x[v])+(y[u]-y[v])*(y[u]-y[v]);}int main()
{read(n);for(int i=1;i<=n;++i)read(x[i]),read(y[i]),e.push_back(node(0,i,d(0,i)));//d(0,i)计算出的即是原点到第 i 个食物点的距离for(int i=1;i<n;++i){for(int j=i+1;j<=n;++j){e.push_back(node(i,j,d(i,j)));}}sort(e.begin(),e.end(),cmp);m=e.size();for(int l=0,r;l<m;l=r){r=l;while(r<m&&e[l].w==e[r].w)++r;//将边权相同的边平行处理for(int j=l;j<r;++j)g[e[j].u]=f[e[j].u],g[e[j].v]=f[e[j].v];//将可能更新的点的缓存数组初始化for(int j=l,u,v;j<r;++j){u=e[j].u,v=e[j].v;g[u]=max(g[u],f[v]+1);if(!u)continue;//如果是 0 到某个食物点的边,视作单向边不反向处理swap(u,v);//反向处理g[u]=max(g[u],f[v]+1);}for(int j=l;j<r;++j)f[e[j].u]=g[e[j].u],f[e[j].v]=g[e[j].v];//更新}cout<<f[0]<<'\n';return 0;
}

“蔚来杯“2022牛客暑期多校训练营5 A题: Don‘t Starve相关推荐

  1. “蔚来杯“2022牛客暑期多校训练营9 补题题解(A、B、G、E)

    "蔚来杯"2022牛客暑期多校训练营9 A Car Show B Two Frogs G Magic Spells E Longest Increasing Subsequence ...

  2. “蔚来杯“2022牛客暑期多校训练营10补题

    H  Wheel of Fortune 题意 有两个人在打炉石,一方转动了尤格萨隆的命运之轮触发了炎爆选项.双方英雄的血量分别为A和B,双方场面的血量分别为ai和bi,问A获胜的概率. 思路 将代码分 ...

  3. “蔚来杯“2022牛客暑期多校训练营8 D题: Poker Game: Decision

    D题: Poker Game: Decision 原题链接:https://ac.nowcoder.com/acm/contest/33193/D 题目大意 在德州扑克的大小比较规则情况下,发牌顺序与 ...

  4. “蔚来杯“2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案)

    "蔚来杯"2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案) 题意 找一个环 上面的边权 极差最大 并输出 点 思路 我们先强联通缩点 统计 ...

  5. “蔚来杯“2022牛客暑期多校训练营1

    "蔚来杯"2022牛客暑期多校训练营1 C Grab the Seat! D Mocha and Railgun 题意: 给定一个圆环,中心为(0, 0).给定T个查询,每次给定环 ...

  6. “蔚来杯“2022牛客暑期多校训练营6

    "蔚来杯"2022牛客暑期多校训练营6 [题目链接]("蔚来杯"2022牛客暑期多校训练营6_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛 ...

  7. “蔚来杯“2022牛客暑期多校训练营10,签到题HFIE

    题号 标题 已通过代码 通过率 团队的状态 A Everlasting Transeunt 点击查看 6/42 B Fall Guys-Perfect Match 点击查看 6/115 C Magic ...

  8. “蔚来杯“2022牛客暑期多校训练营8

    Equivalence in Connectivity 前置知识点如下: 1. 并查集哈希 2. 可撤销并查集 3. 线段树分治 #include<bits/stdc++.h> using ...

  9. “蔚来杯“2022牛客暑期多校训练营2 G.[Link with Monotonic Subsequence] 分块构造

    G. Link with Monotonic Subsequence 构造 题目分析 要求构造一个长度为 n n n的序列,使得序列的 max ⁡ ( lis ( p ) , lds ( p ) ) ...

  10. “蔚来杯“2022牛客暑期多校训练营2 个人题解集合

    文章目录 D.[Link with Game Glitch](https://ac.nowcoder.com/acm/contest/33187/D) 题目分析 Code G.[ Link with ...

最新文章

  1. php自动加载和实现方法,php 自动加载方法
  2. Oracle 在使用pivot时,注意事项
  3. P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码
  4. 语言工程中有趣的事情
  5. 使用 WebBrowser 操作 js
  6. [转载] Python中str跟int的转换
  7. elasticsearch,使用normalizer优化keyword字段的查询
  8. 你中招了吗?《心理学常见误区》
  9. x86服务器能装64位系统吗,x86处理器能装64位系统吗_64位系统装32位的可以么
  10. 西游记中人物对应PMP项目管理中的角色分析
  11. unity-shader 2D - Sprite 影子
  12. 操作Python列表Ⅰ
  13. composite java,java设计模式_Composite模式
  14. 常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
  15. 基于微信小程序的高校餐厅食品留样管理系统设计与实现-计算机毕业设计源码+LW文档
  16. 这就是我的研究生生活
  17. 正易原文(木版本影印)
  18. 单商户商城系统功能拆解25—营销中心—优惠券
  19. 关于触摸芯片SM5101
  20. 10款响应式自适应网站模板(二)

热门文章

  1. python电影爬虫背景介绍_Python爬虫入门教程01之爬取豆瓣Top电影
  2. 集群健康值: yellow 问题
  3. JAVA+selenium+testNG QQ邮箱登录及邮箱发送
  4. 微服务Feign调用后开启Schedule报错No thread-bound request found: Are you referring to request attributes outsid
  5. android 360短信拦截,Android版360卫士更威武
  6. UPC2022/3/18 晚训练赛补题
  7. Word文档中如何添加带打勾的方框
  8. Intel VT-d(1)- 简介
  9. Qt深入浅出(一) 从零开始写Qt应用
  10. Prettier的使用