支付对应的是多重背包问题,找零对应完全背包问题。

难点在于找上限T+maxv*maxv,可以用鸽笼原理证明,实在想不到就开一个尽量大的数组。

 1 #include  <map>
2 #include <set>
3 #include <cmath>
4 #include <queue>
5 #include <cstdio>
6 #include <vector>
7 #include <climits>
8 #include <cstring>
9 #include <cstdlib>
10 #include <iostream>
11 #include <algorithm>
12 using namespace std;
13 const int maxm=10000+120*120+5;
14 int dp_pay[maxm],dp_change[maxm];
15 int N,T,v[105],c[105];
16
17 void multi_knapsack(int n,int W){//多重背包,二进制拆分
18 memset(dp_pay,0x3f,sizeof(dp_pay));
19 dp_pay[0]=0;
20 for(int i=1;i<=N;i++){//转化为完全背包
21 if(c[i]*v[i]>=W){
22 for(int j=v[i];j<=W;j++)
23 dp_pay[j]=min(dp_pay[j],dp_pay[j-v[i]]+1);
24 }
25 else{
26 for(int k=1;c[i]>0;k<<=1){//二进制拆分
27 int x=min(k,c[i]);
28 for(int j=W;j>=v[i]*x;j--)
29 dp_pay[j]=min(dp_pay[j],dp_pay[j-v[i]*x]+x);
30 c[i]-=x;
31 }
32 }
33 }
34 }
35
36 void complete_knapsack(int n,int W){
37 memset(dp_change,0x3f,sizeof(dp_change));
38 dp_change[0]=0;
39 for(int i=1;i<=N;i++){
40 for(int j=v[i];j<=W;j++)
41 dp_change[j]=min(dp_change[j],dp_change[j-v[i]]+1);
42 }
43 }
44
45 int main(){
46 while(~scanf("%d%d",&N,&T)){
47 int maxv=0,W;
48 for(int i=1;i<=N;i++)
49 scanf("%d",&v[i]),maxv=max(maxv,v[i]);
50 for(int i=1;i<=N;i++)
51 scanf("%d",&c[i]);
52 maxv=maxv*maxv;
53 multi_knapsack(N,maxv+T);
54 complete_knapsack(N,maxv);
55 int ans=0x3f3f3f3f;
56 for(int i=0;i<=maxv;i++)
57 ans=min(ans,dp_pay[i+T]+dp_change[i]);
58 if(ans==0x3f3f3f3f)
59 ans=-1;
60 printf("%d\n",ans);
61 }
62 }

最新文章

  1. js下载浏览器中的图片
  2. JQuery插件开发简单实例
  3. SQL Server中cursor的使用步骤
  4. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q92-Q94)
  5. 弹出框四 之toastr.js (完成提示框)
  6. SRM 588 DIV1
  7. ZYB&#39;s Premutation POJ5592
  8. [转]设定version 更新js缓存
  9. 制作变形、移位、扭曲等效果:《CSS3 transform》
  10. C#委托零基础理解
  11. php 基本符号
  12. WebForms vs. MVC
  13. 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
  14. 品阿里 Java 开发手册有感
  15. JS 循环定时的一些思考
  16. walle2.0 nginx.conf配置文件参数
  17. action,func简洁用法
  18. Shiro笔记(四)Shiro的realm认证
  19. itoa()函数
  20. mxnet安装及NDArray初体验

热门文章

  1. ASP.NET Core 6框架揭秘实例演示[29]:搭建文件服务器
  2. JDBC与ODBC的区别
  3. [NCTF2019]SQLi-1||SQL注入
  4. 如何基于WPF写一款数据库文档管理工具(二)
  5. 如何给MySQL添加自定义语法 ?
  6. PureRandom采样类定义和测试
  7. 迅捷Flutter图片浏览软件
  8. 重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!
  9. 详解ConCurrentHashMap源码(jdk1.8)
  10. Angular 新建项目错误:The Schematic workflow failed. See above