zoukankan      html  css  js  c++  java
  • HDU5100Chessboard(数论)

    HDU5100Chessboard(数论)

    题目链接

    题目大意:用k1的瓷砖区铺nn的矩形,问能铺上的最大的面积。

    解题思路:这题没有直接得出结论:l = n%k, ans = max[(n^2 - l^2), (n^2 - (k - l)^2)],可是在画的过程中发现了。最好的情况就仅仅有两种铺法。要不依照贪心的策略来铺,直到铺不下为止。或者是一圈一圈的铺。铺完一圈后最后还会剩下一个矩形。然后再递归子问题,每一个子问题都是返回面积最大的。

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int find (int n, int k) {
    
        if (n < k)
            return 0;
        int mul = n / k;
        int mod = n % k;
        return (mul * n + mod * mul) * k;
    }
    
    int solve (int n, int k) {
    
        int tmp1 = find(n, k), tmp2 = 0;
    
        if (n > k && n % k) 
            tmp2 = solve(n - 2 * (n % k), k) + 4 * (n / k) * (n % k) * k;
        return max(tmp1, tmp2);
    }
    
    int main () {
    
        int T, N, K;
        scanf ("%d", &T);
        while (T--) {
    
            scanf ("%d%d", &N, &K);
            printf ("%d
    ", solve(N, K));    
        }
        return 0;
    }
  • 相关阅读:
    CF101B Buses
    CF1C Ancient Berland Circus
    学习笔记 莫比乌斯反演简单整理
    P3768 简单的数学题
    P2508 [HAOI2008]圆上的整点
    CF19E Fairy
    P1295 [TJOI2011]书架
    CF1148B Born This Way
    CF13E Holes
    CF1148C Crazy Diamond
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5319060.html
Copyright © 2011-2022 走看看