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;
    }
  • 相关阅读:
    bzoj2467 [中山市选2010]生成树
    hdu4489 The King’s Ups and Downs
    hdu4489 The King’s Ups and Downs
    Tyvj1014(区间dp)
    Tyvj1014(区间dp)
    Tyvj1013
    Tyvj1013
    Tyvj1009
    22.引用指针
    21.引用指针
  • 原文地址:https://www.cnblogs.com/kimsimple/p/6714337.html
Copyright © 2011-2022 走看看