【POJ - 1742】Coins (多重背包)
Coins
直接翻译了
Descriptions
Input
Output
Sample Input
3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0
Sample Output
8
4
题目链接
https://vjudge.net/problem/POJ-1742
设d[i][j]——前i种硬币,凑成总值j时,第i种硬币所剩余的个数。
默认d[i][j] = -1,代表无法凑成总值j
转移方程为,若d[i-1][j]≥0,代表前i-1种已能够凑成j,那么就不必花费第i种硬币,所以d[i][j] = c[i]
否则就看d[i][j-v[i]]的值,显然如果j < v[i],那么d[i][j] = -1,否则d[i][j-a[i]] ≤ 0,代表此刻第i种硬币已使用完了,所以自然d[i][j] = -1;
否则,d[i][j] = d[i][j-v[i]]-1;
AC代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 1000005
using namespace std;
int n,m;
int dp[Maxn];
int v[Maxn];
int c[Maxn];
bool cmp(int x)
{
return x>=;
}
int main()
{
while(cin>>n>>m,n+m)
{
for(int i=; i<n; i++)
cin>>v[i];
for(int i=; i<n; i++)
cin>>c[i];
MEM(dp,-);
dp[]=;
for(int i=; i<n; i++)
{
for(int j=; j<=m; j++)
{
if(dp[j]>=)
dp[j]=c[i];
else if(j<v[i]||dp[j-v[i]]<=)
dp[j]=-;
else
dp[j]=dp[j-v[i]]-;
}
}
cout<<count_if(dp+,dp++m,cmp)<<endl;//搜索dp数组中大于等于0的个数
}
return ;
}
【POJ - 1742】Coins (多重背包)的更多相关文章
- POJ 1742 Coins(多重背包, 单调队列)
		Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ... 
- POJ 1742 Coins (多重背包)
		Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 28448 Accepted: 9645 Descriptio ... 
- poj 1742 coins_多重背包
		题意:给你N个种硬币,价值和数量,知道手表不大于m,问能组成(1~m)的价格有多少种情况 套套上次那题的模板直接就行了,http://blog.csdn.net/neng18/article/deta ... 
- POJ 3260 The Fewest Coins(多重背包+全然背包)
		POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ... 
- hdu 2844 poj 1742 Coins
		hdu 2844 poj 1742 Coins 题目相同,但是时限不同,原本上面的多重背包我初始化为0,f[0] = 1;用位或进行优化,f[i]=1表示可以兑成i,0表示不能. 在poj上运行时间正 ... 
- poj 1742 Coins (多重背包)
		http://poj.org/problem?id=1742 n个硬币,面值分别是A1...An,对应的数量分别是C1....Cn.用这些硬币组合起来能得到多少种面值不超过m的方案. 多重背包,不过这 ... 
- Poj 1742 Coins(多重背包)
		一.Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dolla ... 
- poj 1742 Coins(二进制拆分+bitset优化多重背包)
		\(Coins\) \(solution:\) 这道题很短,开门见山,很明显的告诉了读者这是一道多重背包.但是这道题的数据范围很不友好,它不允许我们直接将这一题当做01背包去做.于是我们得想一想优化. ... 
- POJ 1742 Coins ( 经典多重部分和问题 && DP || 多重背包 )
		题意 : 有 n 种面额的硬币,给出各种面额硬币的数量和和面额数,求最多能搭配出几种不超过 m 的金额? 分析 : 这题可用多重背包来解,但这里不讨论这种做法. 如果之前有接触过背包DP的可以自然想到 ... 
- POJ 1742 Coins 【多重背包DP】
		题意:有n种面额的硬币.面额.个数分别为A_i.C_i,求最多能搭配出几种不超过m的金额? 思路:dp[j]就是总数为j的价值是否已经有了这种方法,如果现在没有,那么我们就一个个硬币去尝试直到有,这种 ... 
随机推荐
- selenium driver版本和Chrome浏览器版本对应关系
			ChromeDriver v2.41 (2018-07-27) ---- Chrome v67-69ChromeDriver v2.40 (2018-06-07) ---- Chrome v66-68 ... 
- Windows开发:窗口最大化问题
			MoveWindow(0, 0, 1920, 1080)和SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0)的区别 MoveWindow(, , , ); 我们可以分 ... 
- javaMail 详解
			原文:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html 一.JavaMail API简介JavaMail API是读取. ... 
- 【线性代数】4-4:正交基和Gram算法(Orthogonal Bases and Gram-Schmidt)
			title: [线性代数]4-4:正交基和Gram算法(Orthogonal Bases and Gram-Schmidt) categories: Mathematic Linear Algebra ... 
- Ubuntu 14.04 更换为阿里云源
			#备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak#编辑sudo vim /etc/apt/sources.list,清空后,加入以下 ... 
- Spring Cloud Gateway(二):Spring Cloud Gateway整合Eureka应用
			Spring Cloud Gateway 应用概述 下面的示例启动两个服务:gataway-server 和 user-service 都注册到注册中心 Eureka上,客户端请求后端服务[user- ... 
- [题解] [BZOJ4152] The Captain
			题面 题解 将所有点根据 
- redis几种模式的部署(Windows下实现)
			<参考>http://www.cnblogs.com/ruiati/p/6374152.html 1. 自行下载redis客户端.redis官方不支持Windows系统,所以官网上是下 ... 
- python定时任务实现
			安装 pip install schedule 示例代码 import schedule import time def job(): print("I'm working..." ... 
- FMX开源控件
			FMX开源控件 这是群友谢顿做的控件,必须赞一个! https://github.com/zhaoyipeng/FMXComponents 这是loki的: https://sourceforge.n ... 
