分西瓜(dfs)


描述

今年暑假计算机学院带领大二的计算机专业学生实习,在实习过程中计科一班和计科二班表现突出,辅导员决定买一堆西瓜奖励这两个班,为了对每个班公平,她想让两堆的重量之差最小。每个西瓜的重量已知,你能帮帮她么?

输入:

第一行输入西瓜数量N (1 ≤ N ≤ 20)

第二行有N个数,W1, …, Wn (1 ≤ Wi ≤ 10000)分别代表每个西瓜的重量

输出:

输出分成两堆后的最小质量差

样例输入:

5

5 8 13 27 14

样例输出:

3

 1 //深度优先搜索
 2 #include <iostream>
 3 #include <string.h>
 4 #include <cmath>
 5 using namespace std;
 6 int allmax=0,a[100];
 7 int allsum=0;
 8 void dfs(int sum,int i)
 9 {
10     if(i<0)
11         return ;
12     int max;
13     if(allsum>2*sum)
14         max=allsum-2*sum;
15     else
16         max=2*sum-allsum;
17     if(allmax>max)
18         allmax=max;
19     dfs(sum+a[i],i-1);
20     dfs(sum,i-1);
21 }
22 int main()
23 {
24     int n;
25     while(cin>>n)
26     {
27         int i;
28         memset(a,0,sizeof(a));
29         allmax=9999999;
30         for(i=0; i<n; i++)
31         {
32             cin>>a[i];
33             allsum=allsum+a[i];
34         }
35         dfs(0,n-1);
36         cout<<allmax<<endl;
37         allsum=0;
38     }
39     return 0;
40 }

优质内容筛选与推荐>>
1、自定义express中间件
2、注解学习
3、(一)渲染流程
4、PAT_A1079#Total Sales of Supply Chain
5、ASP.NET Core Web API 最佳实践指南


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号