poj1276--Cash Machine--多重背包

Description

假设你现在有现金cash,有n种商品,给定你它们各自的价格和数量。如果你想尽可能多地购买商品,请求出最多能买商品的总价值。

Sample Input

735 3 4 125 6 5 3 350
633 4 500 30 6 100 1 5 0 1
735 0
0 3 10 100 10 50 10 10

Sample Output

735

630

0

0

题解:

  最近真的在水题耶ww(居然好意思说)

  莫名其妙因为cash==0||n==0的情况WA了两次……其实不写就好了qwq

  就是一个多重背包的裸题吧,dp[j]表示当前容量为j时,最多能花出去的钱数。sum[j]表示的是当前物品购买的数量。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxn=100009;
 8 int f[maxn],g[maxn];
 9 int cash,n,w[maxn],num[maxn],sum[maxn],ans=0;
10 int main()
11 {
12     while(scanf("%d%d",&cash,&n)!=EOF)
13     {
14         for(int i=1;i<=n;i++)
15             scanf("%d%d",&num[i],&w[i]);
16         f[0]=0;
17         memset(f,0,sizeof(f));
18         for(int i=1;i<=n;i++)
19         {
20             memset(sum,0,sizeof(sum));
21             for(int j=w[i];j<=cash;j++)
22             {
23                 if(f[j]<f[j-w[i]]+w[i]&&sum[j-w[i]]+1<=num[i])
24                 {
25                     sum[j]=sum[j-w[i]]+1;
26                     f[j]=f[j-w[i]]+w[i];
27                 }
28             }
29         }
30         printf("%d\n",f[cash]);
31     }
32     return 0;
33 }

时间: 2024-10-12 20:52:34

poj1276--Cash Machine--多重背包的相关文章

POJ1276:Cash Machine(多重背包)

题目:http://poj.org/problem?id=1276 多重背包模板题,没什么好说的,但是必须利用二进制的思想来求,否则会超时,二进制的思想在之前的博客了有介绍,在这里就不多说了. #include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> using namespace std; int V,n,w

poj 1276 Cash Machine (多重背包)

链接:poj 1276 题意:已知金额cash,给定几种不同面值的货币的数量及面值,求利用给定的货币可以凑成 小于等于cash的金额的最大值 分析:因为每种货币的面值及数量已知,可以将其转化为多重背包,背包的容量即为cash, 每个物品的价值及费用都为每种货币的面值. 多重背包可以转化为01背包,不过这样会超时,为了避免这样,可以转化为完全背包和二进制思想的01背包 #include<stdio.h> #include<string.h> int f[100010],v; int

POJ 1276 Cash Machine 多重背包--二进制优化

点击打开链接 Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28337   Accepted: 10113 Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount

POJ 1276 Cash Machine(多重背包的二进制优化)

题目网址:http://poj.org/problem?id=1276 思路: 很明显是多重背包,把总金额看作是背包的容量. 刚开始是想把单个金额当做一个物品,用三层循环来 转换成01背包来做.T了-- 后面学习了 用二进制来处理数据. 简单地介绍一下二进制优化:?(? ? ??)  假设数量是8,则可以把它看成是1,2,4,1的组合,即这4个数的组合包括了1-8的所有取值情况.这是为什么呢?将它们转换成二进制再观察一下: 1:1 2:10 4:100 1:1 二进制都只有0,1.所以1,2,4

poj1276——dp,多重背包

poj1276——dp,多重背包 Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28826   Accepted: 10310 Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested c

POJ1276Cash Machine[多重背包可行性]

Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 32971   Accepted: 11950 Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The m

poj1276--Cash Machine(多重背包判可达)

Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27804   Accepted: 9915 Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The ma

POJ1276 Cash Machine

Language: Default Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27946   Accepted: 9973 Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested c

poj 2392 (Space Elevator) 1276 (Cash Machine)变形背包

这道题跟coins很像,看来楼教主的男人八题果然不简单. 进行coins式的背包处理就好了. 2392 #include<iostream> #include<algorithm> #include<string.h> #include<stdlib.h> #include<stdio.h> #define max(a,b) ((a)>(b)?(a):(b)) typedef long long ll; using namespace st

有关货币问题的动态规划题目--有关01背包,完全背包,多重背包

背包dp:参考背包九讲以及给出一些题目 01背包 (先枚举物品,再逆序枚举容量) 给定n件物品和一个容量为V的背包,每件物品的体积是w[i],价值是va[i](1<=i<=n),求在不超过背包的容量的情况下,怎么选择装这些物品使得得到的价值最大? 例如:有5件物品,体积分别是{2,2,6,5,4},价值分别是{6,3,5,4,6} 递归式:F(i,v)=max(F(i-1,v), F(i-1,v-w[i])+va[i]),其中F(i,v)表示把前i种物品恰放入背包容量为v时取得的最大价值 把这