• poj3134 Power Calculus IDA*


    好端端的一道搜索题目,,,硬生生的被我弄成了乱搞题,,,枚举当前的maxd,深搜结果,然而想到的剪枝方法都没有太好的效果,,,最后用一个贪心乱搞弄出来了,,,
    贪心:每次必用上一次做出来的数字与其他数字组合得到结果。
     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <vector>
     5 //#define debug
     6 int n;
     7 int maxd;
     8 int v1[1000];
     9 long long c[100];
    10 
    11 bool check(void) {
    12     for (int i = 1; i <= maxd + 1;  i++) 
    13         if (v1[i] == n) return 1;
    14     return 0;
    15 }
    16 
    17 
    18 bool h(int d) {
    19     if (v1[d] * c[maxd - d + 1] < n) return 1;
    20     return 0;
    21 }
    22 
    23 bool dfs(int d) {
    24     if (d == maxd + 1) {
    25 #ifdef debug
    26     for (int i = 0; i < v1.size(); i++) printf("%d ", v1[i]);
    27     printf("
    ");
    28 #endif
    29         if (check()) return 1;
    30         return 0;
    31     }
    32     if (h(d)) return 0; 
    33     for (int i = 1; i <= d; i++) {
    34         v1[d+1] = v1[d] + v1[i];
    35         if (dfs(d + 1)) return 1;
    36         v1[d+1] = abs(v1[d] - v1[i]);
    37         if (dfs(d + 1)) return 1;
    38         v1[d+1] = 0;
    39     }
    40     return 0;
    41 }
    42 
    43 int main () {
    44     c[0] = 1;
    45     for (int i = 1; i <= 60; i++) c[i] = c[i-1] * 2;
    46     while (scanf("%d", &n) == 1 && n) {
    47         memset(v1, 0, sizeof(v1));
    48         v1[1] = 1;
    49         for (maxd = 0; ; maxd++) {
    50             if (dfs(1)) {
    51                 printf("%d
    ", maxd);
    52                 break;
    53             }
    54         }
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    Node Express 快速上手
    iPhone开发地图线路关键代码分享
    [转]iPhone本地化总结
    【转】iOS应用view之间数据传递的方式
    优化UITableView cell的滚动速度
    【转】实现Fruit Ninja 的刀光效果
    iOS开发相关资源
    temporary
    _In_ 是什么意思
    Using Run-Time Dynamic Linking(使用运行时动态链接库)
  • 原文地址:https://www.cnblogs.com/CtsNevermore/p/5990799.html
Copyright © 2020-2023  润新知