• POJ-1190 生日蛋糕 NOI99


    深搜+几个剪枝。

    貌似搜索顺序也挺重要的。。。我不知是不是因为这个然后Tle了好久。。。

    #include <cstdio>
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <queue>
    
    #define rep(i, l, r) for(int i=l; i<=r; i++)
    #define down(i, l, r) for(int i=l; i>=r; i--)
    #define maxn 23
    #define MAX 1<<30
    
    using namespace std;
    
    int n, m, ans, minv[maxn], mins[maxn];
    
    void Search(int v, int s, int l, int R, int H)
    {
        if (!l)
        {
            if (v == n && s < ans) 
                ans = s; 
            return;
        }
        if (s+mins[l-1] >= ans || v+minv[l-1] > n || (n-v)*2 >= R*(ans-s)) return;
        down(r, R-1, l)
        {
            if (l == m) s = r*r;
            int tmp = min((n-v-minv[l-1])/(r*r), H-1);
            down(h, tmp, l) Search(v+r*r*h, s+2*r*h, l-1, r, h);
        }
    }
    
    int main()
    {
        scanf("%d%d", &n, &m); ans = n+1;
        rep(i, 1, m) minv[i] = minv[i-1]+i*i*i;
        rep(i, 1, m) mins[i] = mins[i-1]+2*i*i;    
        Search(0, 0, m, sqrt((double)(n-minv[m-1])/m)+1, (n-minv[m-1])/(m*m)+1);
        if (ans == n+1) ans = 0; printf("%d
    ", ans);
        return 0;
    }
    View Code
  • 相关阅读:
    【codevs4919】线段树练习4
    【51Nod1405】树上距离和 二次扫描与换根法
    【洛谷P1717】钓鱼
    【洛谷P1230】智力大冲浪
    【洛谷P1248】加工生产调度
    hdu 1195(搜索)
    hdu 1181(Floyed)
    hdu 1250(大整数)
    hdu 1180(广搜好题)
    hdu 1099(数学)
  • 原文地址:https://www.cnblogs.com/NanoApe/p/4314076.html
Copyright © 2020-2023  润新知