zoukankan      html  css  js  c++  java
  • ZOJ3631 Watashi's BG(01背包,dfs)

    题目链接

    分析:

    这题就是01背包。dp数组开不到 10000000,表示木办法,然后就用了dfs,TLE,剪了几下还是TLE。

    跟人学了下其它剪枝,过了。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 35
    #define INF 10000010
    
    int w[MAXN];
    
    int n, m, min;
    
    int cmp(const void *a, const void *b){
        return *(int *)a - *(int *)b > 0 ? -1 : 1;
    }
    
    void dfs(int cur, int remain){
        int i, s;
        if(min == 0) return ;//剪枝
    
        if(cur >= n){
            if(remain < min) min = remain;
            return ;
        }
    
        s = remain;
        for(i=cur; i<n; i++){//剪枝,这个剪枝是关键
            s -=w[i];
        }
        if(s > min) return;
    
        if(remain >= w[cur]) dfs(cur+1, remain - w[cur]);
        dfs(cur+1, remain);
    }
    
    int main(){
        int i;
        while(scanf("%d %d", &n, &m) == 2){
            min = INF;
            for(i=0; i<n; i++) scanf("%d", &w[i]);
            qsort(w, n, sizeof(w[0]), cmp);
            dfs(0, m);
            printf("%d\n", m-min);
        }
    
        return 0;
    }
  • 相关阅读:
    示例 json with js
    JS json
    jquery
    发布包规范
    20180320待编辑
    CefSharp中c#和js交互
    列举mvc ActionResult的返回值
    怎么实现第三方登录
    mvc @Html控件
    MVC webuploader 图片
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2978195.html
Copyright © 2011-2022 走看看