• 51nod 1007 正整数分组


    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
     收藏
     关注
    将一堆正整数分为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背包了


    #include<stdio.h>
    #include<climits>
    #include<algorithm>
    #include<stack>
    #include<iostream>
    #include<cmath>
    #include<set>
    #include<vector>
    #include<map>
    #include<queue>
    #include<string.h>
    using namespace std;
    #define N 10010
    int a[N]; 
    int n;
    int dp[N];
    int  main(void)
    {	
    	 while(scanf("%d",&n)!=EOF)
    	 {
           int sum=0;
           for(int i=1;i<=n;i++)
           {
    		     cin>>a[i];
    		     sum+=a[i];//挑选出一些数字,是的越靠近sum/2,那么就是背包问题了 
           }
           memset(dp,0,sizeof(dp));
           for(int i=1;i<=n;i++)
           {
      		     for(int j=sum/2;j>=a[i];j--)
      		     {
    		  		 dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
    	         }
           }
           cout<<abs((sum-dp[sum/2])-dp[sum/2])<<endl;
    	 }
     	 return 0;
    }
    


  • 相关阅读:
    第二章.md
    第四章.md
    第一章.md
    第九章.md
    png简析.md
    第五章.md
    好看的粒子效果
    缓动 减速运动
    收集的小效果
    粒子效果2
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387045.html
Copyright © 2020-2023  润新知