zoukankan      html  css  js  c++  java
  • 比赛-Round 1 (14 Jul, 2018)

    1. 同行

    以 1, 2, N 为源点跑分别跑最短路,假设边权为 1 。用 dis[1][N]*B+dis[2][N]*E 和 dis[1][i]*B+dis[2][i]*E+dis[N][i]*P (满足 1 <= i <= N) 来更新答案即可。

    2. 长跑

    设 f[i][j] 表示到达的第 j 个点是第 i 号点,答案是 f[N][N-K] .

    f[1][1] = 1

    f[i][j] = min{ f[t][j-1] + cost(t, i) }

    时间复杂度 O(n3) ,略大,但是注意到 j 是有限制的,即 j+N-i >= N-K ,在动规的循环里加入这个限制,加个计数器会发现最多会跑大概 6 千万次,可以过。

    不过据说纯暴力 500也可以过。

    3. 糖果

    考虑先给每个小朋友发足够的糖果,然后收回。可以发现,应尽量“平摊”地收回糖果。这点很重要。即每次考虑对每个有糖的小朋友都收回 1 颗糖果,直到收回所有超额发出的糖果即可。当然这个收的过程肯定不能每次暴力扫暴力 -1 ,应该先对小朋友糖果数排序,然后从小到大讨论……

    正确性由柯西不等式可以证明。

    4. 抗议

    注意到分的组数没有意义,所以可以定一维的动规 f[i] 表示前 i 头牛的分组方案数。

    f[0] = 1

    f[i] = Σf[j] (j < i 且 sum[i]-sum[j] >= 0)

    对 sum 离散化之后可以用树状数组维护,省去枚举 j 。即先 f[i] = GetSum(hs[i]) 然后再 Add(hs[i], f[i]) 。答案是 f[n] 。

    我改悔罢!

    一开始想出了 4 题暴力动规,优化暂时没想出来。发现 1 题看起来很水,所以赶紧写了一波出去透气。然后非常弱智地写了单向边,存反图。图论题居然连边是有向还是无向都不仔细看,唉……然后写了 2 题正解,用了 20 分钟证明 O(n3) 的暴力是可行的。之后慢慢搞出了 4 题树状数组优化。最后一个小时用手列数据+数学证明的方式,在强力样例的帮助下调试了半个小时,写对了。

    好好看题!

  • 相关阅读:
    关于sqlite数据库在使用过程中应该注意以下几点
    关于THREAD线程中CurrentCulture与CurrentUICulture的学习
    转:ASP.NET MVC3升级到ASP.NET MVC4
    win8 iis安装及网站发布
    转: CKEditor/CKFinder升级心得
    [更新]Windows Phone 实现类似“微博”下拉刷新效果
    EntityFramework中使用Include可能带来的问题
    [更新]Luke.Net for Pangu 盘古分词版更新
    文件大小友好显示类
    找出最慢的查询语句Find your slowest queries
  • 原文地址:https://www.cnblogs.com/ghcred/p/9309206.html
Copyright © 2011-2022 走看看