zoukankan      html  css  js  c++  java
  • zoj 3631 Watashi's BG

    0、1背包,直接做会超时。做了这题我才知道,01背包是能用搜索做的,搜索的时候剪枝很重要。

    (几个月后……)

    光棍节前夕,小T同志来找我,说他遇到了一个题解,里面说是受别人代码的启发,并附上原址,点开一看,居然是我?!我姓福了。真的很感谢这位兄弟,他尊重产权,更重要的是给了我信心。本来我都快要放弃了,现在我又坚定了信念,一定要好好搞下去。说实话,他的博客写得比我好,因为他详细地写出了思路。这时候小T 吐槽了:“其实你也是抄的。”好吧,我受之有愧,我是参考了江财大牛的思路,不过我的代码已经和他的不一样了,核心部分DFS做了逻辑上的改动。

     1 #include <stdio.h>
     2 #include <algorithm>
     3 using namespace std;
     4 int m,n,ans;
     5 int a[35];
     6 bool cmp(int a,int b)
     7 {
     8     return a > b ;
     9 }
    10 void dfs(int i,int sum)
    11 {
    12     int j,k;
    13     //printf("%d %d\n",i,sum);
    14     if(ans == m) return;//相当于if(find)
    15     if(sum > ans) ans = sum;
    16     if(i >= n) return ;
    17     for(j = i, k = sum; j < n; j++)
    18         k += a[j];
    19     if(k <= ans) return;
    20     if(sum+a[i] <= m)
    21         dfs(i+1,sum+a[i]);
    22     dfs(i+1,sum);
    23 }
    24 int main()
    25 {
    26     int i;
    27     while(~scanf("%d%d",&n,&m))
    28     {
    29         for(i = ans = 0; i < n; i++)
    30             scanf("%d",&a[i]),
    31             ans += a[i];
    32         if(ans <= m)
    33         {
    34             printf("%d\n",ans);
    35             continue;
    36         }
    37         sort(a,a+n,cmp);
    38         ans = 0;
    39         dfs(0,0);
    40         printf("%d\n",ans);
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/lzxskjo/p/2661251.html
Copyright © 2011-2022 走看看