http://acm.hdu.edu.cn/showproblem.php?pid=2110

就是个多重背包,有坑点-.-。注意答案模10000中间结果有可能会爆所以计算时就要取模;

由于必须能均分三份所以总价值肯定能除尽3,只要计算出1/3总价值的方案数即可,也就是2/3总价值的方案数:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define inf 0x3f3f3f3f
int dp[100005];
int main()
{
int n,m,i,j,k,sumn,t,c[105],p[105];
while(cin>>n&&n){memset(dp,0,sizeof(dp));
dp[0]=1;
sumn=0;
for(i=1;i<=n;++i) cin>>p[i]>>c[i],sumn+=p[i]*c[i];
if(sumn%3!=0) {puts("sorry");continue;}
sumn=sumn/3;
for(i=1;i<=n;++i){
for(j=sumn;j>=0;--j)
for(k=1;k<=c[i];++k)
if(j>=k*p[i]) dp[j]=(dp[j]+dp[j-k*p[i]])%10000;
else break;
}
if(dp[sumn]) cout<<dp[sumn]%10000<<endl;
else puts("sorry");
}
return 0;
}

下面是母函数:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define ql(a) memset(a,0,sizeof(a))
int price[105],num[105],a1[10005],a2[10005];
int main()
{
int n,m,i,j,k,sumn;
while(cin>>n&&n){sumn=0,ql(a1),ql(a2);
for(i=1;i<=n;++i) cin>>price[i]>>num[i],sumn+=price[i]*num[i];
if(sumn%3!=0) {puts("sorry");continue;}
sumn/=3;
for(i=0;i<=price[1]*num[1]&&i<=sumn;i+=price[1]) ++a1[i];
for(i=2;i<=n;++i){
for(j=0;j<=sumn;++j){
for(k=0;k<=num[i]*price[i]&&k+j<=sumn;k+=price[i])
a2[k+j]=(a2[k+j]+a1[j])%10000;
}
for(j=0;j<=sumn;++j) a1[j]=a2[j],a2[j]=0;
}
if(a1[sumn]) cout<<a1[sumn]%10000<<endl;
else puts("sorry");
}
return 0;
}

hdu2110(多重背包/母函数)的更多相关文章

  1. 杭电1171 Big Event in HDU(母函数+多重背包解法)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. HDU 1059 Dividing 分配(多重背包,母函数)

    题意: 两个人共同收藏了一些石头,现在要分道扬镳,得分资产了,石头具有不同的收藏价值,分别为1.2.3.4.5.6共6个价钱.问:是否能公平分配? 输入: 每行为一个测试例子,每行包括6个数字,分别对 ...

  3. HDU——1059Dividing(母函数或多重背包)

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  4. Holding Bin-Laden Captive!(1.多重背包 2.母函数)

    Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...

  5. Coins(hdu 2844 多重背包)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. Big Event in HDU(多重背包套用模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...

  7. 多重背包--java

    多重背包 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值 是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大母函数的思想也 ...

  8. hdu1059 dp(多重背包二进制优化)

    hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...

  9. 洛谷P1782 旅行商的背包[多重背包]

    题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...

随机推荐

  1. 自己封装的ajax

    /** * ITCAST WEB * Created by lsy on 2016/5/24. */ /* * 1. 请求的类型 type get post * 2. 请求地址 url * 3. 是异 ...

  2. 计算概论(A)/基础编程练习1(8题)/4:求一元二次方程的根

    #include<stdio.h> #include<math.h> int main() { // 待解方程数目 int n; scanf("%d", & ...

  3. OpenGL边用边学------2 经典照相机模型

    https://blog.csdn.net/smstong/article/details/50290327 实际照相步骤 1 布置场景和调整照相机位置 3 选择镜头对焦Focus 4 按下快门 5 ...

  4. 深入浅出JVM

    这篇文章简要解析了JVM的内部结构.下面这幅图展示了一个典型的JVM(符合JVM Specification Java SE 7 Edition)所具备的关键内部组件. 上图展示的所有这些组件都将在下 ...

  5. bzoj1647 / P1985 [USACO07OPEN]翻转棋

    P1985 [USACO07OPEN]翻转棋 其实我们只要枚举第一行的状态,后面的所有状态都是可以唯一确定的. 用二进制枚举灰常方便 #include<iostream> #include ...

  6. 03: KindEditor (HTML可视化编辑器)

    目录: 1.1 kindEditor常用配置参数 1.2 kindEditor下载与文件说明 1.3 kindEditor实现上传图片.文件.及文件空间管理 1.1 kindEditor常用配置参数返 ...

  7. VC++ 利用CreateFile、ReadFile和WriteFile实现CopyFile

    1. CreateFile:这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道. 参照:http://www.cppblo ...

  8. U盘+GRUB2引导PE或linux镜像

    利用U盘制作启动盘,引导WinPE.Linux安装的文章多如牛毛,与他们相比本文的特点有: 1.用且仅用grbu2做引导.不使用grub4dos,不是使用msdos mbr转到活动分区,到ntldr, ...

  9. jquery hover最后解决 - 不再疑惑 - 例子在这里

    hover具有动画累计的bug, 可以使用 stop 或 filter(:not(:animated))来消除, 但是, 即使这样, 当鼠标反复滑入或滑出的时候, 虽然没有动画累计的问题, 但是 下面 ...

  10. Java 多线程中的任务分解机制-ForkJoinPool,以及CompletableFuture

    ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行:当多个“小任务”执行完成之后,再将这些执行结果 ...