UVA 10313(完全背包变形)
Problem B
Pay the Price
Input: standard input
Output: standard output
Time Limit: 2 seconds
Memory Limit: 32 MB
In ancient days there was a country whose people had very interesting habits. Some of them were lazy, some were very rich, some were very poor and some were miser. Obviously, some of the rich were miser (A poor was never miser as he had little to spend) and lazy but the poor were lazy as well (As the poor were lazy they remained poor forever). The following things were true for that country
a) As the rich were miser, no things price was more than 300 dollars (Yes! their currency was dollar).
b) As all people were lazy, the price of everything was integer (There were no cents and so beggars always earned at least one dollar)
c) The values of the coins were from 1 to 300 dollars, so that the rich (who were idle) could pay any price with a single coin.
Your job is to find out in how many ways one could pay a certain price using a limited number of coins (Note that the number of coins paid is limited but not the value or source. I mean there was infinite number of coins of all values). For example, by using three coins one can pay six dollars in 3 ways, 1+1+4, 1+2+3, and 2+2+2. Similarly, one can pay 6 dollars using 6 coins or less in 11 ways.
Input
The input file contains several lines of input. Each line of input may contain 1, 2 or 3 integers. The first integer is always N (0<=N<=300), the dollar amount to be paid. All other integers are less than 1001 and non-negative.
Output
For each line of input you should output a single integer.
When there is only one integer N as input, you should output in how many ways N dollars can be paid.
When there are two integers N and L1 as input, then you should output in how many ways N dollars can be paid using L1 or less coins.
When there are three integers N, L1 and L2 as input, then you should output in how many ways N dollars can be paid using L1, L1+1 …, L2coins (summing all together). Remember that L1 is not greater than L2.
Sample Input
6
6 3
6 2 5
6 1 6
Sample Output
11
7
9
11
题意:现在有1到300的硬币,有3种情况。首先输入n,表示要凑成的价值为n,然后如果后面没数字,求组成n的方式几种,如果后跟1个数字a,求用不多于a的硬币数组成n有几种,如果后跟2个数字a,b,求使用数量a到b的硬币组成方式有几种。
思路:凑硬币的变形,完全背包。dp数组多开一维用来表示用的硬币数。状态转移方程为:
dp[j][k] += dp[j - i][k - 1]。
代码:
#include <stdio.h>
#include <string.h> int n, a, b, i, j, k;
long long dp[305][305], ans;
char sb[20]; int min(int a, int b) {
return a < b ? a : b;
}
int main() {
dp[0][0] = 1; for (i = 1; i <= 300; i ++) {
for (j = i; j <= 300; j ++) {
for (k = 1; k <= 300; k ++) {
dp[j][k] += dp[j - i][k - 1];
}
}
}
while (gets(sb) != NULL) {
a = b = -1; ans = 0;
sscanf(sb, "%d%d%d", &n, &a, &b);
a = min(a, 300); b = min(b, 300);
if (a == -1) {
for (i = 0; i <= n; i ++) {
ans += dp[n][i];
}
}
else if (b == -1) {
for (i = 0; i <= a; i ++) {
ans += dp[n][i];
}
}
else {
for (i = a; i <= b; i ++) {
ans += dp[n][i];
}
}
printf("%lld\n", ans);
}
return 0;
}
UVA 10313(完全背包变形)的更多相关文章
- 紫书 例题 9-5 UVa 12563 ( 01背包变形)
总的来说就是价值为1,时间因物品而变,同时注意要刚好取到的01背包 (1)时间方面.按照题意,每首歌的时间最多为t + w - 1,这里要注意. 同时记得最后要加入时间为678的一首歌曲 (2)这里因 ...
- UVa 1213 (01背包变形) Sum of Different Primes
题意: 选择K个质数使它们的和为N,求总的方案数. 分析: 虽然知道推出来了转移方程, 但还是没把代码敲出来,可能基本功还是不够吧. d(i, j)表示i个素数的和为j的方案数,则 d(i, j) = ...
- FZU 2214 Knapsack problem 01背包变形
题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...
- Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)
C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- P1282 多米诺骨牌 (背包变形问题)
题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- J-流浪西邮之寻找火石碎片 【经典背包变形】
题目来源:2019 ACM ICPC Xi'an University of Posts & Telecommunications School Contest 链接:https://www. ...
随机推荐
- java--equal&==
[转自]http://blog.csdn.net/yiqunattack/article/details/5727143 [非常详细的介绍了string的用法http://blog.csdn.net/ ...
- 初始WebApi 利用WebApi实现基础的CRUD
微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService.它是简单,代码 ...
- 【译】在ASP.NET中创建PDF-iTextSharp起步
原文 [译]在ASP.NET中创建PDF-iTextSharp起步 .Net framework 中自身并不包含可以和pdf打交道的方法.所以,当你需要你的ASP.Net Web应用程序中包含创建或与 ...
- Python 文本解析器
Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...
- 基于mAppWidget实现手绘地图--索引&DEMO
文章翻译完了,梳理一下,附Demo下载 基于mAppWidget实现手绘地图(一)–简介 基于mAppWidget实现手绘地图(二)–概要 基于mAppWidget实现手绘地图(三)–环境搭建 基于m ...
- Lucene4.3入门
辞职交接期间无聊看了一下搜索引擎,java社区比较火的当然是Lucene,想写一个简单的小例子,在网上找了些资料,不过都不是4.3的,自己看了一下. 下载地址:http://lucene.apache ...
- c语言,volatile
一.意义: 该关键字的意义就是表示定义的变量值随时都会改变,必须从变量的地址处读取值,所以只有这个变量在使用过程中可能被改变(比如中断程序),就需要用这个关键字说明. )volatile, ...
- cocos2dx 在windows上实现键盘输入
cocos2d主要面向的是触摸屏幕设备的,在WINDOWS下的定位感觉多多少少就是相当于一个模拟器,因此并没有太多的PC下重要的键盘支持.然而响应键盘消息对于调试来说可以提供不少方便.下边就通过更改c ...
- perl学习(10) 字符串处理函数和排序
1.1.index Perl 查找子串第一次在大字符串中出现的地方,返回第一个字符的位置. . . my $stuff = “Howordy world!”; my $where3 = index($ ...
- 《C陷阱与缺陷》整理二
1.数组名作实參 在C语言中,我们没有办法将一个数组作为函数參数传递,假设我们使用数组名作为參数.这个时候数组名立马会被转换为指向该数组的第一个元素的指针. 关于这一点的理解能够向前深 ...