• [bzoj3071]N皇后


    哈哈哈水题~

    但是不能一眼看出来的。。我想了一个小时?!


    题面

    Description

    “国际象棋中,一方的皇后数不能超过5个”
    一个N*N的棋盘,任意摆放皇后,最坏情况下最少需要多少个皇后才能保证所有的格子都被攻击到。

    Input

    多组数据
    第一行一个整数,数据组数T
    接下来T行,每行一个正整数N

    Output

    每组数据输出一行一个整数表示答案。

    Sample Input

    1
    3

    Sample Output

    3

    HINT

    100%的数据,N<=50,T<=25


     真坑啊。。被数据范围骗了。。差点写了深搜。

    然而事实是:

    对于任意一个点A,这个地方放上皇后,A所能覆盖的点放上皇后也能覆盖A。

    而A覆盖不了的点放上皇后怎么也覆盖不了A。

    所以最优的方案就是,先在这些覆盖不了的点上全都放上皇后,最后就会只剩一个A没有覆盖,再怎么放A都要被覆盖了。

    如下图

    对于任意的A,红圈再加上随便一个位置就是要放的地方。

    可以证明这个A取四个角的时候不能覆盖点最多。即答案最大。

    所以答案就是n*n-n*3+3了。

    代码简直智障。

    1 #include<cstdio>
    2 int main(){
    3     int t;scanf("%d",&t);
    4     while(t--){
    5         int n;scanf("%d",&n);
    6         printf("%d
    ",n*(n-3)+3);
    7     }
    8 }
  • 相关阅读:
    spring查看生成的cglib代理类源码详解
    java-jdk动态代理生成的代理类源码
    约瑟夫斯问题-java版数组解法和链表解法
    HashMap源码解析(简单易懂)
    windows云服务器发布项目
    java学习
    TTL macro登陆linux服务器
    c#笔记
    C#笔记
    git merge
  • 原文地址:https://www.cnblogs.com/orzzz/p/7217213.html
Copyright © 2020-2023  润新知