问题描述
蒜头君酷爱收集萌萌的娃娃。蒜头君收集了 6 种不同的娃娃,第 i 种娃娃的萌值为 i(1≤i≤6)。现在已知每种娃娃的数量 mi,蒜头君想知道,能不能把娃娃分成两组,使得每组的娃娃萌值之和相同。
输入格式
输入一行,输入 6 个整数,代表每种娃娃的数量 mi(0≤mi≤20,000)。
输出格式
输出一行。如果能把所有娃娃分成萌值之和相同的两组,请输出Can be divided.,否则输出Can’t be divided.。
样例输入
2 0 1 1 2 1
样例输出
Can’t be divided.
解题思路:先判定萌值是否为偶数,若非,则不能平分;若是,将多重背包问题转化为01背包进行dp求解,是否可以为萌值总和的一半即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int m[10];//代表每种娃娃的数量
int p[1200010];//每种娃娃的萌值
int k=0,flag=0;
ll sum=0;
ll dp[1200010];
void solve()
{
for(ll i=1;i<=k;i++){
for(ll j=sum/2;j>=1;j++){
if(p[i]<=j){
dp[j]=max(dp[j-1]+p[i],