[HAOI2008]硬币购物
题目描述
硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚ci硬币,买si的价值的东西。请问每次有多少种付款方法。
输入输出格式
输入格式:
第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s
输出格式:
每次的方法数
输入输出样例
1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900
4
27
说明
di,s<=100000
tot<=1000
题解:
一开始认为要求出一个4元方程的解的个数,用容斥求出所有GCD(a,b,c,d)|si的解
但时间复杂度太高,且条件限制不好做。
后面看到一种解法:
用dp求f[i]为钱数为i时的方案总数
显然f[i]=signma(f[i-c[j]])
复杂度为O(4*s)
再用容斥原理求出所有方案,减去1超出限制,再减去2超限,还有3和4。再加上1,2超限.....
i超出限制的方案为f[si-(d[j]+1)*c[j]]
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long c[],d[],tot;
long long f[],ans;
int main()
{long long i,j,s;
cin>>c[]>>c[]>>c[]>>c[]>>tot;
f[]=;
for (i=;i<=;i++)
for (j=c[i];j<=;j++)
{
f[j]+=f[j-c[i]];
}
for (i=;i<=tot;i++)
{
for (j=;j<=;j++)
scanf("%I64d",&d[j]);
scanf("%I64d",&s);
ans=f[s];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]];
if ((d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]]; if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]]; if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]];
if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]<=s)
ans-=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]]; if ((d[]+)*c[]+(d[]+)*c[]+(d[]+)*c[]+(d[]+)*d[]<=s)
ans+=f[s-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*c[]-(d[]+)*d[]];
cout<<ans<<endl;
}
}
[HAOI2008]硬币购物的更多相关文章
- Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1747 Solved: 1015[Submit][Stat ...
- bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理
题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1706 Solved: 985[Submit][ ...
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...
- BZOJ 1042: [HAOI2008]硬币购物 [容斥原理]
1042: [HAOI2008]硬币购物 题意:4种硬币.面值分别为c1,c2,c3,c4.1000次询问每种硬币di个,凑出\(s\le 10^5\)的方案数 完全背包方案数? 询问太多了 看了题解 ...
- BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包
BZOJ_1042_[HAOI2008]硬币购物_容斥原理+背包 题意: 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值 ...
- P1450 [HAOI2008]硬币购物(完全背包+容斥)
P1450 [HAOI2008]硬币购物 暴力做法:每次询问跑一遍多重背包. 考虑正解 其实每次跑多重背包都有一部分是被重复算的,浪费了大量时间 考虑先做一遍完全背包 算出$f[i]$表示买价值$i$ ...
- 【BZOJ】1042: [HAOI2008]硬币购物
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3307 Solved: 2075[Submit][Stat ...
- BZOJ1042 [HAOI2008]硬币购物 【完全背包 + 容斥】
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2924 Solved: 1802 [Submit][St ...
- 【BZOJ1042】[HAOI2008]硬币购物 容斥
[BZOJ10492][HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值 ...
- BZOJ 1042: [HAOI2008]硬币购物 容斥+背包
1042: [HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请 ...
随机推荐
- $translate 的用法
translate 的用法 1.在html页面:文本的翻译 <h1 translate>hello world</h1> <h1 translate = 'hello w ...
- C语言第一次博客作业---顺序机构基础练习
一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...
- io多路复用(三)
#!/usr/bin/env python # -*- coding:utf-8 -*- import socket sk1 = socket.socket() sk1.bind(('127.0.0. ...
- Flask 学习 七 用户认证
使用werkzeug 实现密码散列 from werkzeug.security import generate_password_hash,check_password_hash class Use ...
- clang++ 链接问题 和 VS Code
clang++ 链接问题 和 VS Code 如果你在windows上使用clang 并且同时安装有vs和mingw, clang链接是会自动使用msvs, 链接时会有LINK error LINK ...
- 快速搭建fabric-v1.1.0的chaincode开发环境
本文参考了fabric官方文档:http://hyperledger-fabric.readthedocs.io/en/latest/peer-chaincode-devmode.html?highl ...
- vue项目中的常见问题
总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...
- Spring Cloud的DataRest(二)
一.创建工程 1.主程序 2.依赖 3.配置 二.案例开发 1.entity 2.repository 三.案例验证 安装postman4.13,启动应用,执行如下案例验证! 1.create - p ...
- C# 读取网页JSON数据
场景描述: 公司和别的系统需要对接,现在对方提供一个网址,数据都是json字符串,我需要对json数据进行处理. 提供的json数据如下格式 一.读取网址中的json数据 public string ...
- JavaScript作用域那些事
作用域 (1).作用域也叫执行环境(execution context)是JavaScript中一个重要的概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.在JavaScript ...