可以看出这是个多重背包,运用单调队列优化可以使每次询问达到O(s).这样总复杂度为O(s*tot). 会TLE。

因为改题的特殊性,每个硬币的币值是不变的,变的只是每次询问的硬币个数。

我们不妨不考虑硬币个数的限制。这样可以用完全背包在O(s)的时间求出dp[]数组,表示没有限制的种数。

现在加入每个硬币的限制后,由于容斥原理,答案就是没有限制的种数-第一个硬币的限制种数-第二个硬币限制种数......

如果加入第一个硬币的限制后怎么求呢。就相当于你先把第一个硬币用到刚超过限制,剩下的随便怎么选。此时的种数就是dp[s-(d[1]+1)*c[1]],d[1]表示第一种硬币的限制数,

c[1]表示第一种硬币的币值。 剩下的同理。

之后所以的询问都可以在O(1)的时间求出。

因此总复杂度为O(s+tot).

# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi acos(-1.0)
# define eps 1e-
# define MOD
# define INF
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
int res=, flag=;
char ch;
if((ch=getchar())=='-') flag=;
else if(ch>=''&&ch<='') res=ch-'';
while((ch=getchar())>=''&&ch<='') res=res*+(ch-'');
return flag?-res:res;
}
void Out(int a) {
if(a<) {putchar('-'); a=-a;}
if(a>=) Out(a/);
putchar(a%+'');
}
const int N=;
//Code begin... LL dp[N];
int c[], d[]; void init()
{
dp[]=;
FO(i,,) FO(j,c[i],N) dp[j]=dp[j]+dp[j-c[i]];
}
int main ()
{
scanf("%d%d%d%d%d",c,c+,c+,c+,c+);
init();
while (c[]--) {
scanf("%d%d%d%d%d",d,d+,d+,d+,d+);
LL ans=dp[d[]];
FO(i,,) {
int tot=, tmp=;
FO(j,,) if (i&(<<j)) ++tot, tmp+=(d[j]+)*c[j];
if (tmp<=d[]) ans+=((tot&)?-dp[d[]-tmp]:dp[d[]-tmp]);
}
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. CSS float 浮动属性
  2. ABP源码分析三十六:ABP.Web.Api
  3. 网页插件学javascript还是jquery好啊?
  4. RabbitMQ原理与相关操作(三)消息持久化
  5. jQuery中异步操作对象Deferred
  6. AEAI CRM客户关系管理升级说明
  7. 任务管理界面添加显示RAM信息
  8. css table表格无法调整宽度问题分析
  9. Css3做的旋转显示文字和角度的变化
  10. case then 的用法 貌似case then不支持别名
  11. Hadoop权威指南学习笔记二
  12. Session小案例------完成用户登录
  13. 如何打造100亿SDK累计覆盖量的大数据系统
  14. 每天一个Linux命令(02)--cd命令
  15. Python PycURL 网络编程
  16. ThinkPhp_5框架开发【整理】
  17. java web项目最简单的结构
  18. Android开发工程师文集-1 小时学会各种Drawable
  19. 浅谈博弈论中的两个基本模型——Bash Game&amp;&amp;Nim Game
  20. php7连接 sqlserver踩过的坑,could not find driver解决方式

热门文章

  1. SpaceVim 发布 v0.8.0
  2. [原创]用python检测LVS real server状态实现HTTP高可用
  3. asp.net微信公众平台本地调试设置
  4. Java:String、StringBuffer、StringBuilder
  5. Android 项目,没有可运行的Module项
  6. 利尔达NB-IOT模组Coap数据AT+NMGS发送时返回-513的原因
  7. mysql 常用语句使用
  8. Oracle TDE的学习
  9. docker in docker
  10. 使用keytool工具产生带根CA和二级CA的用户证书