zoukankan      html  css  js  c++  java
  • 常州培训 day5 解题报告

    第一题:(贪心)

    题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示。要求从上到下从左到右字典序最小。

    N,M<=100

    解题过程:

    1.首先感觉是能放就尽可能使正方形边长大,但是很明显有反例(见图A)

    2.然后想到从上到下从左到右,依次检查,如果还没被铺上,那么就先铺上1*1的X,然后检查它右边能填什么,如果他右边能填的比它大(Y),那么就把1*1的改成尽可能大,如果他右边的比它小,那么它只要放1*1的X,然后右边放尽可能大的Y。 证明不来,直觉是对的,通过了所有数据。。

    图A:7*5

    A A A A A

    A A A A A

    A A A A A

    A A A A A 

    A A A A A

    B B X

    B B

    按1的话在X处放2*2的C,变成

    A A A A A

    A A A A A

    A A A A A

    A A A A A 

    A A A A A

    B B C C

    B B C C

    而实际可以先 放1*1的C

    A A A A A

    A A A A A

    A A A A A

    A A A A A 

    A A A A A

    B B C

    B B

    然后放2*2的B

    A A A A A

    A A A A A

    A A A A A

    A A A A A 

    A A A A A

    B B C B B

    B B    B B

    这样明显更优。

  • 相关阅读:
    dubbo
    常见线程池
    面试之葵花宝典
    Java线程池
    DB2分页
    平凡
    自由职业一时爽,一直自由一直爽
    弱水三千,只取一瓢。
    没病到一定程度,你千万别去。
    一个转身一个轮回
  • 原文地址:https://www.cnblogs.com/vb4896/p/3925432.html
Copyright © 2011-2022 走看看