Coins POJ - 1742
Input
(n<=100,m<=100000,面额<=100000,每种个数<=1000)
Output
Sample Input
3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0
Sample Output
8
4
题解:
真是,先打了一个二进制分组t了,(本来可以过的吧!)。
正解是n×m的,首先,我们考虑设dp[i][j]表示凑出j这个数字最大还可以剩下几个i号硬币。这个可以省掉第一维.
dp[j]=-1表示不可以凑出来,转移就是if(dp[j]>=0) dp[j]=c[i];如果用前面的硬币就可以凑出来,那么i号硬币可以一个不用,if(dp[j]>0) dp[j+v[i]]=max(dp[j+v[i]],dp[j]-1);,然后就是很简单的用一个硬币。
初始化就是dp[0]=c[i],表示凑出0还剩下c[i]个硬币。
代码:
二进制分组TLE
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int v[],num[],w[],dp[];
int n,m,cnt=;
int main(){
while(){
scanf("%d%d",&n,&m);
if(!n&&!m) break;
memset(dp,,sizeof(dp));
dp[]=;cnt=;
for(int i=;i<=n;i++) scanf("%d",&v[i]);
for(int i=;i<=n;i++) scanf("%d",&num[i]);
for(int i=;i<=n;i++){
for(int j=;num[i]>;j*=){
int x=min(num[i],j);
num[i]-=x;
w[++cnt]=x*v[i];
}
}
for(int i=;i<=cnt;i++){
for(int j=m;j>=w[i];j--){
dp[j]|=dp[j-w[i]];
}
}
int ans=;
for(int i=;i<=m;i++) ans+=dp[i];
printf("%d\n",ans);
}
}
AC
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define MAXN 100000+1
#define RG register
using namespace std;
int dp[MAXN],v[MAXN],c[MAXN];
int n,m;
int main()
{
while(){
scanf("%d%d",&n,&m);
if(!n&&!m) break;
for(int i=;i<=n;i++) scanf("%d",&v[i]);
for(int i=;i<=n;i++) scanf("%d",&c[i]);
memset(dp,-,sizeof(dp));
dp[]=;
for(RG int i=;i<=n;i++){
for(RG int j=;j<=m;j++){
if(dp[j]>=) dp[j]=c[i];
else dp[j]=-;
}
for(RG int j=;j<=m-v[i];j++){
if(dp[j]>) dp[j+v[i]]=max(dp[j+v[i]],dp[j]-);
}
}
int ans=;
for(int i=;i<=m;i++) if(dp[i]>=) ans++;
printf("%d\n",ans);
}
return ;
}
Coins POJ - 1742的更多相关文章
- DP:Coins(POJ 1742)
用硬币换钱 题目大意:就是有面值为A1,A2,A3....的硬币,各有C1,C2,C3...的数量,问在钱数为m的范围内,能换多少钱?(不找零) 这题看名字就知道是完全背包,但是这题又有点不一样, ...
- hdu 2844 poj 1742 Coins
hdu 2844 poj 1742 Coins 题目相同,但是时限不同,原本上面的多重背包我初始化为0,f[0] = 1;用位或进行优化,f[i]=1表示可以兑成i,0表示不能. 在poj上运行时间正 ...
- Coins HDU - 2844 POJ - 1742
Coins HDU - 2844 POJ - 1742 多重背包可行性 当做一般多重背包,二进制优化 #include<cstdio> #include<cstring> in ...
- 题解报告:hdu 2844 & poj 1742 Coins(多重部分和问题)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...
- [POJ 1742] Coins 【DP】
题目链接:POJ - 1742 题目大意 现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值. 题目分析 使用一种 O(nm) 的 D ...
- poj 1742(好题,楼天城男人八题,混合背包)
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 33269 Accepted: 11295 Descripti ...
- The Fewest Coins POJ - 3260
The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...
- poj 1742 Coins (多重背包)
http://poj.org/problem?id=1742 n个硬币,面值分别是A1...An,对应的数量分别是C1....Cn.用这些硬币组合起来能得到多少种面值不超过m的方案. 多重背包,不过这 ...
- poj 1742 Coins(dp之多重背包+多次优化)
Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...
随机推荐
- Tomcat性能调优参数简介
近期,我们的一个项目进入了试运营的阶段,在系统部署至阿里云之后,我们发现整个系统跑起来还是比较慢的,而且,由于代码的各种不规范,以及一期进度十分赶的原因,缺少文档和完整的测试,整个的上线过程一波三折. ...
- 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡
一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...
- Linux中新建用户用不了sudo命令问题:rootr is not in the sudoers file.This incident will be reported解决
参考:https://blog.csdn.net/lichangzai/article/details/39501025 如果执行sudo命令的用户没有执行sudo的权限,执行sudo命令时会报下面的 ...
- netcore mvc 的简单实现
实现的功能 简单的路由系统 支持中间件 简单Filter支持 只支持HttpPost.HttpGet 使用Dotliquid做为视图渲染引擎 核心实现 HttpChannel 复制监听Tcp请求,并按 ...
- 时钟AnalogClock和DigitalClock
<AnalogClock android:layout_width="fill_parent" android:layout_height="fill_parent ...
- 装系统 ---------- 了解 UEFI与Legacy、硬盘分区MBR和GPT
UEFI:全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface),一种详细描述类型接口的标准.这种接口用于操作系统自动从预启动的操作环境,加载到一种 ...
- mysql 5.5之参数详解
[mysql]default-character-set=utf8 [mysqld] datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock # ...
- Tomcat部署spring boot项目
Tomcat部署spring boot项目 需要在启动类做修改
- Vue学习之如何进行调试
调试方法 vue调式方法,浏览器检查元素进入到console 1.console.log() 2.alert('sd') 3.debugger //程序会运行到这里停止 ![](https://img ...
- 使用System.Text.Json处理Json文档以及部分坑
System.Text.Json处理Json文档需要用到JsonDocument,JsonElement,JsonProperty. JsonDocument就是一个表示Json文档的东西,JsonE ...