noj [1480] 懒惰的风纪委Elaine (多重背包)
http://ac.nbutoj.com/Problem/view.xhtml?id=1480
[1480] 懒惰的风纪委Elaine
- 时间限制: 1000 ms 内存限制: 65535 K
- 问题描述
Elaine是学园都市中的一个风纪委,每天都会接到命令对某个街道进行检查,并抓捕危险分子。她所在的风纪委支部附近有M条街道。这些街道由北到南并排均匀的分布在一条直线上,每条街道之间的距离都为1。但是众所周知,Elaine是一个很懒很懒的人(-..-说我坏话!!被我看到了!!),她不想一步一步走完所有街道,但好在她的好友Kuso为她制作了大量的传送卷轴。不过,因为Kuso的能力等级太低,他制作的卷轴有严重的缺点,他的卷则只能向南飞一段固定的距离(当然,他预先制作了很多种类的卷轴),而Elaine所在的风纪委支部却在最北边。每一次出去检查,Elain都要使用好几张卷轴。但如果是某些不能传送到的地方,Elaine只能走过去了。不过回来的话,她就可以用自带的传送系统传送到支部的传送点。
有一天,Elaine想知道,如果她从风纪委支部出发,可以检查那些街道。她手里有N种传送卷轴(1,2,3,,,N),每个卷轴可以传送的距离为Ai,卷轴的数量为Ci。则Elaine靠那些卷轴,可以不走路而直接传送的有哪些街道?
- 输入
- 数据有多组输入。每一组数据的第一行有两个数:N,M(0<N<=100,0<M<=1000)。分别表示传送卷轴的种类数和街道数量。在第二行有2N个数,A1,A2,A3...An,C1,C2,C3...Cn (1<=Ai<=100000,1<=Ci<=1000)。数据输入以0 0结束。
- 输出
- 每组数据占一行,输出一个数,为Elaine可以传送到的街道总数。
- 样例输入
3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0- 样例输出
8
4- 先将多重背包转换成01背包,然后在求解01背包:
- 任何一个正整数N 都可以分解成 N = 2^0 + 2^1 + 2^2+......+(剩下不足2^n的部分)
- 例如:13 = 1 + 2 + 4 + 6
- 这里是对数量进行拆分; 这样的好处可以很好的降低复杂度,从O(N*N)降到O(N*logN)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std; int dp[];
int a[];
vector<int> v; int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&n&&m)
{ int i,j;
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
} //多重背包转换成01背包
v.clear();
int t;
for(i=;i<n;i++)
{
int nc;
scanf("%d",&nc);
t=;
while(t<=nc)
{
v.push_back(t*a[i]);
nc-=t;
t=t*;
}
if(nc>){
v.push_back(nc*a[i]);
}
} //01背包求解过程
memset(dp,,sizeof(dp));
dp[]=;
int sum=;
for(i=;i<v.size();i++)
{
for(j=sum==m?m-v[i]:sum;j>=;j--) //这个用到优化j=sum==m?m-v[i]:sum,这个优化是必要的,不然TLE
{
if(dp[j]!=&&j+v[i]<=m){
dp[j+v[i]]=;
}
}
sum+=v[i];
if(sum>m)
{
sum=m;
}
}
int cnt=;
for(i=;i<=m;i++)
{
if(dp[i])
{
cnt++;
}
}
printf("%d\n",cnt);
}
return ;
}
noj [1480] 懒惰的风纪委Elaine (多重背包)的更多相关文章
- 洛谷P1782 旅行商的背包[多重背包]
题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...
- HDU 2082 找单词 (多重背包)
题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...
- Poj 1276 Cash Machine 多重背包
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26172 Accepted: 9238 Des ...
- poj 1276 Cash Machine(多重背包)
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33444 Accepted: 12106 De ...
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
- (多重背包+记录路径)Charlie's Change (poj 1787)
http://poj.org/problem?id=1787 描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...
- 单调队列优化DP,多重背包
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...
- POJ1742 Coins[多重背包可行性]
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 34814 Accepted: 11828 Descripti ...
- POJ1276Cash Machine[多重背包可行性]
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 32971 Accepted: 11950 De ...
随机推荐
- ios存储 plist 偏好设置 自定义对象存储
1,plist Plist注意:不能存储自定义对象 Plist:数组和字典, 如何判断一个对象能不能使用Plist,就看下有没有writeToFile 获取应用的文件夹(应用沙盒) NSString ...
- Android_AsyncTask_Method
package com.example.day07_asynctask_method; import android.os.AsyncTask; import android.os.Bundle; i ...
- ubuntu on win VS ubuntu(virtual box)VS Cygwin
执行命令粗略估计执行时间: date --rfc-3339='ns';seq 100000000 | grep 8 | wc -w; date --rfc-3339='ns' ubuntu 14.04 ...
- Centos 6.4 安装elasticsearch+kibana
elasticsearch和kibanna的链接地址:https://www.elastic.co/downloads,我的环境里用的包为kibana-4.1.1-linux-x64.tar.gz和e ...
- C# IO操作(二)File类和Directory类的常用方法
本篇主要介绍一些常用的IO操作,对文件和目录的操作:留给自己复习之用. 1.创建文件 string sPath1=Path.GetDirectoryName(Assembly.GetExecuting ...
- MVC (M-V-C启动程序调用关系)
在网上有很多mvc程序启动,调用之间的关系与顺序.而且还有很多很不错的网站.推荐一个 http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1 ...
- ###STL学习--标准模板库
下面进行STL的学习.希望能了解标准模板库中的常用容器,迭代器,可以自由运用STL以提高编写代码的效率.下面的内容我想以知识点为总结,不再像<Effective C++>那样以章节进行总结 ...
- Action Filters for ASP.NET MVC
本文主要介绍ASP.NET MVC中的Action Filters,并通过举例来呈现其实际应用. Action Filters 可以作为一个应用,作用到controller action (或整个co ...
- 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)
从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用, ...
- 九度OJ 1209 最小邮票数 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1209 题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值. 如,有1分,3分,3分,3 ...