• NOI导刊 2009 提高二


    开灯

    题目大意

    对编号为([i imes a])的灯进行操作,找出操作数为奇数的那一个

    题目分析

    难度: 入门

    因为看到操作数为奇数,因此直接进行位运算,做亦或和

    打砖块

    题目分析

    第一眼看上去像动归,但是有以下两个问题难以解决:

    1. 状态怎么表示
    2. 奖励子弹怎么处理

    因为我比较弱,本来想写个(50pts),结果梦想直接破灭

    其实下来看这50分超级好拿,我走入了要表示现阶段前面所有方块状态的误区,才没有得到这暴力分

    如果不考虑奖励子弹,那么我们用(f[i][j])表示前(i)列使用(j)个子弹的最大得分

    这个dp就非常的简单:$$f[i][j] = max(f[i - 1][j], f[i - 1][j - k] + s[i][k])$$

    那么我们再来考虑如果有奖励子弹的情况:

    我们有一个很简单的做法:那就是如果这个有奖励子弹,这个砖块就相当于是免费的,我们能打就打

    我们可以尝试这个更新到下面的非免费砖块,然后一样的dp

    然而这个做法是错误的,考虑一下如果后面的如果在后面的序列中可以“打而不用完",然后最后再回来打这个,就会有更优的解

    由于这样的话会破坏无后效性这一要素,我们考虑在这种情况进行分类讨论。

    我们用(by[i][j])表示对前(i)列砖块打(j)发子弹,且最后一发子弹不是对着前(i)列发出的最大值;(bn[i][j])表示对前(i)列砖块打(j)发子弹,且最后一发子弹是对着前(i)列发出的最大值,然后我们特判一下最后的一发是不是在第(i)列打出就行了。

    长方形

    这道题没什么价值,而且结题部分要写很长,我直接粘一下题解的链接
    https://www.luogu.org/problemnew/solution/P1950

    收费站

    题目大意

    给定一个无向图,求(u)(v)中,在总长不超过(s)的情况下,在所有点中(f)的最大值最小是多少

    题目解析

    因为求的是最大值最小,我们二分一下这个值,然后小于这个值的边我们就删除掉,跑一下最短路就可以了

    难度大概是提高-

    不是很熟悉二分和链式前向星的模板,所以调试略微久了点,最终二分还写挂了,只有(80pts)

  • 相关阅读:
    Ext.js给form加背景图片
    Linux安装Scala
    idea 无法创建Scala class 选项解决办法汇总
    idea 无法创建Scala class 选项解决办法汇总
    i++和++i的区别,及其线程安全问题
    java面试题
    大数据学习——scala入门程序
    大数据学习——spark安装
    大数据学习——kafka+storm+hdfs整合
    大数据学习——日志监控告警系统
  • 原文地址:https://www.cnblogs.com/Alessandro/p/9637393.html
Copyright © 2020-2023  润新知