zoukankan      html  css  js  c++  java
  • HDU 1171Big Event in HDU(转01背包)

    题意:

    给你一组数,分成差距最小的两份A,B(A>=B)

    分析:

    转01背包

    注意:

    01背包用一维数组

    不要用二维

      二维数组若是开太大,内存超限,开太小,RE

    #include "cstdio"
    #include "cmath"
    #include "cstring"
    #include "iostream"
    #include "algorithm"
    using namespace std;
    #define LL long long
    #define N 250002
    int dp[N];
    int v[N];
    int solve(int num,int W)
    {
        for(int i = 0;i < num;i++)
        {
            for(int j = W;j >= v[i];j--)
            {
                dp[j] = max(dp[j],dp[j-v[i]]+v[i]);
            }
        }
        return dp[W];
    }
    int main()
    {
        int t;
        while(scanf("%d",&t),(t>0))
        {
            memset(dp,0,sizeof(dp));
            memset(v,0,sizeof(v));
            int num=0,sum=0;
            int v1,n1;
            while(t--)
            {
                scanf("%d%d",&v1,&n1);
                for(int i=0;i<n1;i++)
                {
                    v[num++]=v1;
                    sum+=v1;
                }
            }
            int W=sum/2;
            int s=solve(num,W);
            printf("%d %d
    ",sum-s,s);
        }
        return 0;
    }
  • 相关阅读:
    WebService
    JavaMail
    ssh框架整合
    CSS3初步
    SpringMVC 文件上传及下载
    Java多线程
    SpringMVC 数据校验
    初始化参数绑定——日期格式
    SpringMVC入门
    Quartz
  • 原文地址:https://www.cnblogs.com/kimsimple/p/6714337.html
Copyright © 2011-2022 走看看