zoukankan      html  css  js  c++  java
  • 51 Nod 1007 正整数分组【类01背包】

    1007 正整数分组

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10
    将一堆正整数分为2组,要求2组的和相差最小。
    例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。
    Input
    第1行:一个数N,N为正整数的数量。
    第2 - N+1行,N个正整数。
    (N <= 100, 所有正整数的和 <= 10000)
    Output
    输出这个最小差
    Input示例
    5
    1
    2
    3
    4
    5
    Output示例
    1
    分析:

    本题要求两个正整数数组的和差,那么要使得两个和差最小,那么必定每个数组是越靠近sum/2的(就是和的中间点)

    那么我们就可以把这道题目转化为简单的01背包了。

    下面给出AC代码:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define N 10010
     4 int a[N]; 
     5 int n;
     6 int dp[N];
     7 int  main(void)
     8 {    
     9      while(scanf("%d",&n)!=EOF)
    10      {
    11        int sum=0;
    12        for(int i=1;i<=n;i++)
    13        {
    14              cin>>a[i];
    15              sum+=a[i];//挑选出一些数字,是的越靠近sum/2,那么就是背包问题了 
    16        }
    17        memset(dp,0,sizeof(dp));
    18        for(int i=1;i<=n;i++)
    19                for(int j=sum/2;j>=a[i];j--)
    20                    dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
    21        cout<<abs((sum-dp[sum/2])-dp[sum/2])<<endl;
    22      }
    23       return 0;
    24 }
  • 相关阅读:
    saltstack(master迁移)
    saltstack(主机改名)
    saltstack-部署
    redis部署
    lvs+keepalived
    android适应屏幕
    Android 网络编程
    使用pdb调试python
    python zookeeper 学习笔记
    Python 守护进程
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/7572069.html
Copyright © 2011-2022 走看看