zoukankan      html  css  js  c++  java
  • NOIP2012 Day1 T2国王游戏 洛谷P1080

    第一篇博客啊……

    由于我太弱了,还要去补不全的知识点准备参加人生第一次NOIp,所以第一篇博客就简短一点好了(偷懒就直说吧……)

    洛谷P1080传送门

    题意概括:

      有N对数ai和bi,以及两个数a0和b0  。现在,你可以将这N对数任意排列,记第i对数前所有a(包括a0)的乘积为si,则对于每对数有v=floor(si/bi)。对于每种排列情况,记MX=max(v)。求min(MX)。

    数据范围:

      1 ≤ n ≤1,000,0 < a、b < 10000。

    一些瞎BB(题解):

      这种题很明显不是让你列出所有情况(废话)。

      总体来看,求MAX的MIN是一个很大局观的问题,所以看到这种题目的时候,很弱的我只能想到贪心按某种东西把每一对数排个序,但是根本想不到按什么排序。其实是由于我没经验题刷少了……(什么其实,就是刷少了)从这道题来看,这种题目的套路基本上是,转化大局观为局部观,决策出某两个元素的先后顺序。

      估计看到这里,再思考一下,大部分大牛就知道这么写了(大牛还用来看你的题解??)。

      但是像我这样的小蒟蒻还是很难想到的……所以有了后面的继续瞎BB。考虑两个相邻元素i,j。我们现在的目标只是决策出他们的先后。假设i在前比j在前更优。整体上看,他们俩的先后只会改变v和vj  。

      i在前: vi=(si)/bi  vj=(si*ai)/b

      j在前: vj=(sj)/bj  vj=(sj*aj)/bi

       则max((si)/bi,(si*ai)/bj)<max((sj)/bj,(sj*aj)/bi)。显然,两次分别的si ,sj是相同的,且(si*ai)/bj>=(sj)/b,(sj*aj)/bi>=(si)/bi 。所以其实就是(si*ai)/bj <(sj*aj)/bi ,即ai*bi <aj*bj  也就是说,按a、b的乘积从小到大排序就好了。(PS:基于a、b的范围,要写高精度)

      然后可以很不负责地说这题我根本没写……所以没有代码并且可能有说错的地方,欢迎各位大佬指正!


    日常写错……欢迎指正 QQ:2960005671 邮箱:bleavescoder@163.com
  • 相关阅读:
    侧滑的一个注意
    viewpager+fragment结合
    webview
    动画
    <context:annotation-config> 和 <context:component-scan>的区别
    spring mvc 原理及应用
    HDU
    使用Log4Net将系统日志信息记录到记事本和数据库中
    chromium for android GPU进程结构分析
    【云图】怎样制作全国KTV查询系统?
  • 原文地址:https://www.cnblogs.com/BLeaves/p/7698142.html
Copyright © 2011-2022 走看看