• 网易招聘笔试题--牛牛的背包问题


    题目链接: https://www.nowcoder.com/question/next?pid=9763997&qid=152612&tid=14751374

    解题思路: 题目中明确说了是背包问题,但这是个假象,看了题目中的数据范围,O(nm)的背包不可能通过。然后发现题目中n的范围特别小,n<=30。所以直接dfs了。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 long long W;
     5 long long a[35];
     6 
     7 int n;
     8 
     9 long long ans = 0;
    10 
    11 void dfs(int t, long long sum)
    12 {
    13     ++ans;
    14     if (t == n - 1)
    15     {
    16         return;
    17     }
    18     for (int i = t+1; i < n; ++i)
    19     {
    20         if (sum + a[i] <= W)
    21         {
    22             dfs(i, sum+a[i]);
    23         }
    24     }
    25 }
    26 
    27 
    28 int main()
    29 {
    30     scanf("%d%lld", &n, &W);
    31     long long a_sum = 0LL;
    32     for (int i = 0; i < n; ++i)
    33     {
    34         scanf("%lld", &a[i]);
    35         a_sum += a[i];
    36     }
    37     // printf("%lld
    ", sum);
    38     if (a_sum <= W)
    39     {
    40         printf("%lld
    ", (1LL<<n));
    41         return 0;
    42     }
    43     dfs(-1, 0);
    44     printf("%lld
    ", ans);
    45     return 0;
    46 }
  • 相关阅读:
    用redis实现分布式锁
    mac下Nginx+lua模块编译安装
    ESXi5 中克隆Linux虚拟主机的网络配置
    DOS命令中的For
    让delphi解析chrome扩展的native应用
    C语言 cgi(3)
    C语言 cgi(2)
    C语言cgi(1)
    c++ input,output
    Array of Objects
  • 原文地址:https://www.cnblogs.com/djingjing/p/8687712.html
Copyright © 2020-2023  润新知