zoukankan      html  css  js  c++  java
  • Cubes(DFS+剪枝)

    题意:给一个数N,求N最少由多少个数的立方构成,并输出这些数。

    做法:DFS + 剪枝,剪枝的边界很很很重要!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <stdio.h>
    int cub[400];
    int ans[300];
    int tp[300];
    int n;
    int sum = 0x3f3f3f3f; //个数
    void dfs(int left, int depth, int pos) {
        if(left == 0 && depth < sum) {  //成立则更新ans数组
            sum = depth;
            for(int i = 0; i < depth; i++) ans[i] = tp[i];
            return;
        }
        if(depth +1 >= sum) return;  //等于号是多么的重要orz....
        for(int i = pos; i >= 1; i--) {
            if(cub[i] > left) continue;
            if(depth + left / cub[i] >= sum) return;  //等于号是多么的重要orz....
            tp[depth] = i;
            dfs(left - cub[i], depth+1, i); //下一次从第i个数开始搜
        }
    }
    int main() {
        for(int i = 0; i < 400; i++) cub[i] = i * i * i; 
        scanf("%d", &n);
        dfs(n, 0, 366);
        printf("%d ", sum);
        for(int i = 0; i < sum; i++) {
            if(i > 0) putchar(' ');
            printf("%d", ans[i]);
        }
        putchar(' ');
    }
  • 相关阅读:
    django之分页
    linux后台运行和关闭、查看后台任务
    Django的模板系统
    Django的视图系统
    Django的配置文件(settings.py)
    Django的URL路由
    初始Django
    shell if判断总结
    一个抓取智联招聘数据并存入表格的python爬虫
    Python MySQLdb 查询中文出现问号的解决方法
  • 原文地址:https://www.cnblogs.com/bestwzh/p/6730596.html
Copyright © 2011-2022 走看看