首页 > 其他分享 >BZOJ 1042:[HAOI2008]硬币购物 容斥原理 背包dp

BZOJ 1042:[HAOI2008]硬币购物 容斥原理 背包dp

时间:2023-07-07 13:35:10浏览次数:61  
标签:1042 ch 10 ll 硬币 容斥 ans include BZOJ



1042: [HAOI2008]硬币购物


Time Limit: 10 Sec  Memory Limit: 162 MB

Submit: 2505  Solved: 1505

[Submit][Status][Discuss]

Description


  硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚ci硬币,买s
i的价值的东西。请问每次有多少种付款方法。


Input


  第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s<=100000,tot<=1000


Output


  每次的方法数


Sample Input


1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900


Sample Output


4
27




把不需要限制硬币使用个数的搞出来

然后用容斥原理把超出限制的高出去


#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<complex>
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	return x*f;
}
const int N=100100;
ll c[5],d[5],f[N];
int main()
{
	ll n,T;
	for(int i=1;i<=4;i++)c[i]=read();T=read();
	f[0]=1;
	for(int j=1;j<=4;j++)for(int i=c[j];i<=N;i++)
	f[i]+=f[i-c[j]];
	while(T--)
	{
		for(int i=1;i<=4;i++)d[i]=read();n=read();
		ll ans=f[n];
		for(int i=1;i<=4;i++)if(n>=c[i]*(d[i]+1))
		ans-=f[n-c[i]*(d[i]+1)];
		for(int i=1;i<=4;i++)for(int j=i+1;j<=4;j++)
		if(n>=c[i]*(d[i]+1)+c[j]*(d[j]+1))
		ans+=f[n-c[i]*(d[i]+1)-c[j]*(d[j]+1)];
		for(int i=1;i<=4;i++)for(int j=i+1;j<=4;j++)for(int k=j+1;k<=4;k++)
		if(n>=c[i]*(d[i]+1)+c[j]*(d[j]+1)+c[k]*(d[k]+1))
		ans-=f[n-c[i]*(d[i]+1)-c[j]*(d[j]+1)-c[k]*(d[k]+1)];
		if(n>=c[1]*(d[1]+1)+c[2]*(d[2]+1)+c[3]*(d[3]+1)+c[4]*(d[4]+1))
		ans+=f[n-c[1]*(d[1]+1)-c[2]*(d[2]+1)-c[3]*(d[3]+1)-c[4]*(d[4]+1)];
		printf("%lld\n",ans);
	}
	return 0;
}
/*
1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900

4
27
*/




标签:1042,ch,10,ll,硬币,容斥,ans,include,BZOJ
From: https://blog.51cto.com/u_16181403/6652006

相关文章

  • BZOJ 2243: [SDOI2011]染色 树链剖分+线段树
    2243:[SDOI2011]染色TimeLimit: 20Sec  MemoryLimit: 512MBSubmit: 7623  Solved: 2855[Submit][Status][Discuss]Description给定一棵有n个节点的无根树和m个操作,操作有2类:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜色段数量(连续......
  • BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压dp
    1725:[Usaco2006Nov]CornFields牧场的安排TimeLimit: 5Sec  MemoryLimit: 64MBSubmit: 698  Solved: 489[Submit][Status][Discuss]DescriptionFarmerJohn新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12;1<=N<=12),每一格都是一块正方形的土地。FJ......
  • BZOJ 1915: [Usaco2010 Open]奶牛的跳格子游戏 单调队列优化dp
    1915:[Usaco2010Open]奶牛的跳格子游戏TimeLimit: 4Sec  MemoryLimit: 64MBSubmit: 281  Solved: 110[Submit][Status][Discuss]Description奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子,(3<=N<=250,000),编号为1..N......
  • BZOJ 1877: [SDOI2009]晨跑 费用流拆点
    1877:[SDOI2009]晨跑TimeLimit: 4Sec  MemoryLimit: 64MBSubmit: 2271  Solved: 1215[Submit][Status][Discuss]DescriptionElaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑、仰卧起坐等等,不过到目前为止,他坚持下来的只有晨跑。现在给出一张......
  • BZOJ 2929: [Poi1999]洞穴攀行 最大流
    2929:[Poi1999]洞穴攀行TimeLimit: 1Sec  MemoryLimit: 128MBSubmit: 388  Solved: 215[Submit][Status][Discuss]Description洞穴学者在ByteMountain的GrateCave里组织了一次训练。训练中,每一位洞穴学者要从最高的一个室到达最底下的一个室。他们只能向下走......
  • BZOJ 1927: [Sdoi2010]星际竞速 费用流
    1927:[Sdoi2010]星际竞速TimeLimit: 20Sec  MemoryLimit: 259MBSubmit: 2344  Solved: 1442[Submit][Status][Discuss]Description10年一度的银河系赛车大赛又要开始了。作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座α星的悠......
  • BZOJ 1497: [NOI2006]最大获利 最大权闭合子图
    1497:[NOI2006]最大获利TimeLimit: 5Sec  MemoryLimit: 64MBSubmit: 5196  Solved: 2530[Submit][Status][Discuss]Description新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战。THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做......
  • BZOJ 1022: [SHOI2008]小约翰的游戏John SG函数 Anti−SG
    1022:[SHOI2008]小约翰的游戏JohnTimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 2667  Solved: 1701[Submit][Status][Discuss]Description小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一......
  • BZOJ 3996: [TJOI2015]线性代数 最大权闭合子图 最小割
    3996:[TJOI2015]线性代数TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 1499  Solved: 885[Submit][Status][Discuss]Description给出一个N*N的矩阵B和一......
  • BZOJ 2435: [Noi2011]道路修建 树的遍历-_-
    2435:[Noi2011]道路修建TimeLimit: 10Sec  MemoryLimit: 128MBSubmit: 3810  Solved: 1300[Submit][Status][Discuss]Description在W星球上有n个国家。为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通。但是每个国家的国王都很......