poj1742 单调队列优化多重背包

2024-04-28 17:08

本文主要是介绍poj1742 单调队列优化多重背包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

如题:http://poj.org/problem?id=1742

Coins
Time Limit: 3000MS Memory Limit: 30000K
Total Submissions: 31258 Accepted: 10640

Description

People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coins.He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact price(without change) and he known the price would not more than m.But he didn't know the exact price of the watch.
You are to write a program which reads n,m,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of value A1,A2,A3...An then calculate how many prices(form 1 to m) Tony can pay use these coins.

Input

The input contains several test cases. The first line of each test case contains two integers n(1<=n<=100),m(m<=100000).The second line contains 2n integers, denoting A1,A2,A3...An,C1,C2,C3...Cn (1<=Ai<=100000,1<=Ci<=1000). The last test case is followed by two zeros.

Output

For each test case output the answer on a single line.

Sample Input

3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0

Sample Output

8
4

Source

LouTiancheng@POJ

 

 

 

由这一题的M,N太大,使用二进制拆分的O(MN∑logni)直接wa,于是想起以前见过的单调队列去均摊复杂度到O(MN),就是将容量拆分成余数+k*v[i],找出单调性,入队,每次在窗口大小为n,n=min(num[i],V/v[i])里取出最大值更新。又去查了资料。终于基本搞清楚了。

这篇文章讲得很好:http://blog.csdn.net/flyinghearts/article/details/5898183,大家点进去看吧,贴上我借鉴作者部分代码后的AC代码。

还有就是一点,这一题只能用f[i]表示当前价值i能不能装出来,而使用平常的单调队列去算价值==背包容量也会超。

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXV 100005
#define MAXN 105
#define max(a,b)(a>b?a:b)

bool a[MAXV];
int w[MAXN];
int num[MAXN];
bool f[MAXV];


void multipack(int V,int v,int n)
{
 int i,j,k;;
 if(n==1)
 {
  for(i=V;i>=v;i--)
   f[i]=f[i]||f[i-v];
  return;
 }
 if(n*v>=V)
 {
  for(i=v;i<=V;i++)
   f[i]=f[i]|f[i-v];
  return;
 }
 for(j=0;j<v;j++)
 {
  int sum=0;
  bool *p1=a,*p2=a-1;
  for(k=j;k<=V;k+=v)
  {
   if(p2==p1+n)
    sum-=*p1++;
   *++p2=f[k];
   sum+=f[k];
   if(sum!=0)
    f[k]=1;
  }
 }
}

int main()
{
// freopen("C:\\1.txt","r",stdin);
 int n,m;
 while(~scanf("%d%d",&n,&m))
 {
  if(n==0&&m==0)
   break;
  int i;
  for(i=0;i<n;i++)
   scanf("%d",&w[i]);
  for(i=0;i<n;i++)
   scanf("%d",&num[i]);
  memset(f,false,sizeof(f));
  f[0]=true;
  for(i=0;i<n;i++)
   multipack(m,w[i],num[i]);
  int res=0;
  for(i=1;i<=m;i++)
   if(f[i]==true)
    res++;
  cout<<res<<endl;
 }
 return 0;
}

 

 

 

这篇关于poj1742 单调队列优化多重背包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943793

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3