zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    使用element-ui组件el-table时需要修改某一行样式(包含解决样式无效的问题)或某一列的样式
    面试题:线程A打印1-10数字,打印到第5个数字时,通知线程B
    面试题:不使用数学库求平方根
    Springboot2.x集成Redis集群模式
    Springboot2.x集成Redis哨兵模式
    Springboot2.x集成单节点Redis
    基本算法:冒泡排序算法
    Redis进阶:Redis的哨兵模式搭建
    Redis进阶:Redis的主从复制机制
    Redis的消息订阅及发布及事务机制
  • 原文地址:https://www.cnblogs.com/Alessandro/p/9637393.html
Copyright © 2011-2022 走看看