您当前的位置: 首页 > 

2022牛客多校(五)

Lusfiee 发布时间:2022-09-19 16:45:00 ,浏览量:4

2022牛客多校(五)

文章目录
  • 2022牛客多校(五)
    • 一、比赛小结
    • 二、题目分析及解法(基础题)
    • A、Don't Starve
    • B、Watches
    • C、Bit Transmission
    • D、Birds in the tree
    • F、A Stack of CDs
    • G、KFC Crazy Thursday
    • H、Cutting Papers
    • K、Headphones
    • 三、题目分析及解法(进阶题)
    • E、Fraction Game
    • I、Board Game
    • J、Check In

一、比赛小结

比赛链接:"蔚来杯"2022牛客暑期多校训练营5

这场是草酸哥出的一套题,最后 unrated 了

二、题目分析及解法(基础题) A、Don’t Starve

题目链接:A-Don’t Starve

题意:

给定 n 个点有食物(每个点可以吃多次),每个点有一个坐标,对与行走的规则是每一步都必须严格短于上一步,问最优的方案下能够吃到多少次食物

题解:

观察可得,当你站在某一个特定的点上时,会影响你的接下来转移的只有上一步所走的距离具体是多少,但如果想把上一步的距离设入状态的话内存是不允许的。所以我们考虑设立状态dp[i][j]表示上一步在i,当前这步走到j了的情况下最多已经吃到次数是多少,而对于转移,因为我们知道了最近两步的行走

所以可以直接计算出上一步的长度从而进行转移了,复杂度O(n^2)

代码:

#include 
using namespace std;
const int maxn = 2e3 + 5;
const int Max = 0x3f3f3f3f;
int n;
int x[maxn], y[maxn];
struct Edge {
  int u, v, dis;
  Edge(int u = 0, int v = 0, int dis = 0) : u(u), v(v), dis(dis) {}
  bool operator a.dis; }
};
vector e;
int f[maxn], g[maxn];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  memset(f, -Max, sizeof f);
  cin >> n;
  for (int i = 1; i > x[i] >> y[i];
  for (int i = 0; i             
关注
打赏
1688896170
查看更多评论
0.1184s