hdu2110(多重背包/母函数)
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(多重背包/母函数)的更多相关文章
- 杭电1171 Big Event in HDU(母函数+多重背包解法)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1059 Dividing 分配(多重背包,母函数)
题意: 两个人共同收藏了一些石头,现在要分道扬镳,得分资产了,石头具有不同的收藏价值,分别为1.2.3.4.5.6共6个价钱.问:是否能公平分配? 输入: 每行为一个测试例子,每行包括6个数字,分别对 ...
- HDU——1059Dividing(母函数或多重背包)
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- Holding Bin-Laden Captive!(1.多重背包 2.母函数)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- Coins(hdu 2844 多重背包)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Big Event in HDU(多重背包套用模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...
- 多重背包--java
多重背包 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值 是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大母函数的思想也 ...
- hdu1059 dp(多重背包二进制优化)
hdu1059 题意,现在有价值为1.2.3.4.5.6的石头若干块,块数已知,问能否将这些石头分成两堆,且两堆价值相等. 很显然,愚蠢的我一开始并想不到什么多重背包二进制优化```因为我连听都没有听 ...
- 洛谷P1782 旅行商的背包[多重背包]
题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...
随机推荐
- bzoj1650 / P2855 [USACO06DEC]河跳房子River Hopscotch / P2678 (noip2015)跳石头
P2855 [USACO06DEC]河跳房子River Hopscotch 二分+贪心 每次二分最小长度,蓝后检查需要去掉的石子数是否超过限制. #include<iostream> #i ...
- np.random.normal()正态分布
高斯分布的概率密度函数 numpy中 numpy.random.normal(loc=0.0, scale=1.0, size=None) 参数的意义为: loc:float 概率分布的均值,对应着整 ...
- C++使用Socket 邮箱登录服务器验证
转载:http://blog.csdn.net/zengraoli/article/details/36866241 转载:http://blog.csdn.net/alger_magic/artic ...
- C++ Compress Floder
第三方函数.头文件.测试工程下载地址:http://download.csdn.net/detail/u012958937/8361733
- jQuery 源码分析:当 selector 传来一个函数时,怎么进行处理?
本文章为 0.9 版本,将会在稍后润色更新.本文使用的 jQuery 版本为 3.4.0 我们知道使用 $ 操作符时,可以往里面塞很多类型的参数,字符串,对象,函数...,jQuery 会根据不同的参 ...
- cogs 2221. [SDOI2016 Round1] 数字配对
★★ 输入文件:pair.in 输出文件:pair.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两 ...
- linux下去掉pdf的密码(前提:知道密码)
一.背景 Linux jello 4.16.3 SMP Thu Apr 19 07:32:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 二.去掉密码 2.1 先 ...
- linux下连接无线网出现nl80211: Could not configure driver mode nl80211: deinit ifname=wlan1 disabled_11b_rates=0 wlan1: Failed to initialize driver interface
一.背景1.1 jello@jello:~$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescripti ...
- POJ1144 Network(割点)题解
Description A Telephone Line Company (TLC) is establishing a new telephone cable network. They are c ...
- 【第三章】 springboot + jedisCluster
如果使用的是redis2.x,在项目中使用客户端分片(Shard)机制.(具体使用方式:第九章 企业项目开发--分布式缓存Redis(1) 第十章 企业项目开发--分布式缓存Redis(2)) 如果 ...