首页 > 其他分享 >POJ 1014 Dividing

POJ 1014 Dividing

时间:2022-12-24 18:12:34浏览次数:48  
标签:goods Dividing int sum POJ printf 1014

POJ 1014 Dividing

题意:

多重背包问题,给出若干物品,求是否能分成价值相同的两堆

思考:

求出总和 \(sum\) 之后,如果 \(sum\) 是奇数则一定不可能,然后如果我们能凑出 \(sum / 2\) 的话,那就可以平分,这里就变成了多重背包问题了。

实现:

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 6e4 + 5;
int f[N];
int a[10], goods[N];
int main()
{
    int lun = 1;
    while (scanf("%d", &a[1]) != EOF)
    {
        int sum = a[1] * 1;
        for (int i = 2; i <= 6; i++)
        {
            scanf("%d", &a[i]);
            sum += a[i] * i;
        }
        if (sum == 0)
        {
            printf("\n");
            break;
        }
        int m = sum / 2;
        for (int i = 0; i <= m; i++)
            f[i] = 0;

        for (int i = 1; i <= 6; i++)
        {
            int v = i, s = a[i];
            int cnt = 1;
            for (int j = 1; j <= s; j *= 2)
            {
                goods[cnt++] = v * j;
                s -= j;
            }
            if (s > 0)
                goods[cnt++] = s * v;

            for (int j = 1; j < cnt; j++)
            {
                for (int k = m; k >= goods[j]; k--)
                {
                    f[k] = max(f[k], f[k - goods[j]] + goods[j]);
                }
            }
        }
        printf("Collection #%d:\n", lun++);
        if (f[m] == m && sum % 2 == 0)
            printf("Can be divided.\n");
        else
            printf("Can't be divided.\n");
        printf("\n");
    }
    return 0;
}

标签:goods,Dividing,int,sum,POJ,printf,1014
From: https://www.cnblogs.com/zxr000/p/17003118.html

相关文章

  • POJ 1276 Cash Machine
    POJ1276CashMachine题意:多重背包问题思路:多重背包模板实现:#include<cstdio>#include<algorithm>usingnamespacestd;constintN=100005;intgoods[N......
  • POJ 1837 Balance
    POJ1837Balance题意:一个天平上有\(C(2<=C<=20)\)个挂钩,挂钩所在位置在区间\([-15,15]\)。你的手里有\(G(2<=G<=20)\)个砝码,每个砝码的重量在区间\([1,25]\)。......
  • POJ 1159 Palindrome
    POJ1159Palindrome题意:给出一个字符串,求最少插入多少个字符可以让该字符串变成回文字符串思路1:思路1是卡过去的(用\(short\)换\(int\)和用了一个常数优化),所......
  • POJ 1080 Human Gene Functions
    POJ1080HumanGeneFunctions题意:给出两组\(DNA\)序列求它们的最大相似度每个字母与其他字母或自身和空格对应都有一个打分,求在这两个字符串中插入空格,让这两个字......
  • POJ 3176 Cow Bowling
    POJ3176CowBowling题意:给出一个数字三角形,每个分叉路口可以选择一条道路向下走,获得路上的点的权值。求可以获得的最大权值是多少?思路:从上向下走和从下向上走是一......
  • POJ 1163 The Trangle
    POJ1163TheTrangle题意:给出一个数字三角形,每个分叉路口可以选择一条道路向下走,获得路上的点的权值。求可以获得的最大权值是多少?定义状态:我们需要知道当每个位置......
  • POJ 3278 Catch That Cow(BFS)
    POJ3278CatchThatCow​ 现在你在一个数轴上的位置x,位置k上有一头牛,你要抓住这头牛,也就是走到位置k上。那怎么走呢?你有两种走路的方法,一种是从x移动到\(2\tim......
  • POJ-1088 滑雪
    POJ-1088滑雪有一个平面区域,上面有一些点,每个点对应一定的权值,每次移动只能从当前位置向上下左右四个方向中,权值小于当前位置权值的点移动,一次性最多可以移动多远(相邻位......
  • POJ-2533 Longest Ordered Subsequence
    POJ-2533LongestOrderedSubsequence题意:给出一个序列,求出这个序列的最长上升子序列序列\(A\)的上升子序列\(B\)定义如下:\(B\)为\(A\)的子序列\(B\)为严......
  • POJ-1458 Common Subsequence
    POJ-1458CommonSubsequence题意:首先对最长子序列有个定义:如果一个字符串a可以由另一个字符串b删去某些元素得到,那么说明a就是b的子序列字符串现在有两个字符串,请问最......