动态规划 HDOJ-1114 完全背包

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114

1.问题描述

给出每种硬币的重量与价值,计算储蓄罐中硬币重量为x时,所含硬币的最少总价。每种硬币有无限个。

2.输入

T
E F
N
P1 W1
P2 W2
...
Pn Wn

T:测试用例个数
E:空猪储蓄罐的重量
F:硬币+储蓄罐的重量
N:硬币种类数
Pi :第i种硬币的价值
Wi:第i种硬币的重量
1 <= E <= F <= 10000

3.输出

输出储蓄罐中硬币的最少价值——“The minimum amount of money in the piggy-bank is XX.”

若无论怎样装硬币都不能让总重恰好为规定的值,则输出“This is impossible.”。

4.示例输入

3
10 110
2
1 1
30 50
10 110
2
1 1
50 30
1 6
2
10 3
20 4

5.示例输出

The minimum amount of money in the piggy-bank is 60.
The minimum amount of money in the piggy-bank is 100.
This is impossible.

6.分析

完全背包。求总重恰好为x时的最少价值。

7.代码

7.1 一维dp[]

7.2二维dp[][]

时间: 2024-08-24 14:32:30

动态规划 HDOJ-1114 完全背包的相关文章

背包算法最优解的问题

问题描述 背包算法最优解的问题 若果把背包问题 直接按价值降序排列 和 按单位质量价值降序排列 两者的结果进行比较,能不能得出最优解?如果不能,在不涉及递归和穷举的前提下,有什么方法可以得出最优解? 解决方案 选取价值最大者.反例: W=30 物品:A B C 重量:28 12 12 价值:30 20 20 根据策略,首先选取物品A,接下来就无法再选取了,可是,选取B.C则更好. 选取单位重量价值最大的物品.反例: W=30 物品:A B C 重量:28 20 10 价值:28 20 10 根据

求不大于一个值的最佳组合

问题描述 比如给定一个数组2.3,5,7.1,8,9,900,101,200可能数组元素很多上万个我想按元素组合起来数值不超过790每个元素只能出现一次所有元素都要组合到求c#算法有点类似背包问题但是数量太大了求时间空间复杂度较低的写法 解决方案 解决方案二:这是个线性整数规划问题...解决方案三:C(M,N)N=1,2,3...M再加上个过滤器解决方案四:数组中有小数??会重复??解决方案五:"所有元素都要组合到"是什么意思?一旦你纠结"所有.最"这种词儿,那么就

C++动态规划之背包问题解决方法_C 语言

本文实例讲述了C++动态规划之背包问题解决方法.分享给大家供大家参考.具体分析如下: 问题描述: 背包的最大容量为W,有N件物品,每件物品重量为w,价值为p,怎样选择物品能使得背包里的物品价值最大? 输入:10 3   (W,N) 4 5   (w,p) 6 7   (w,p) 8 9   (w,p) 实现代码: #include <stdio.h> #define THING 20 #define WEIGHT 100 int arr[THING][WEIGHT]; /* 背包容量为weig

hdu 1114 Piggy-Bank(完全背包)

点击打开链接hdu1114 思路: 裸完全背包 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int N = 510; const int MAXN = 10010; int sum , n; int p[N] , w[N]; int dp[

动态规划 HDOJ2602-Bone Collector-01背包

Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 40794    Accepted Submission(s): 16961 Problem Description Many years ago , in Teddy's hometown there was a man who was called "Bo

HDOJ 1081(ZOJ 1074) To The Max(动态规划)

Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that re

算法:uva 1407 Caves (树形背包dp)

题意 一棵n个节点的树,树的边有正整数权,表示两个节点之间的距离.你的任务是回答这样的询问:从跟 节点出发,走不超过x单位的距离, 最多能经过多少节点?同一个节点经过多次, 只能算一个. 思路 这题同样是多天前看的, 在今天才想出解法的. 动态规划就是这么有意思 :) 遍历n个节点, 有两种情 况, 第一种是遍历完之后不回到出发点, 第二种是要回到出发点. 两种都可能会重复经过某些边, 但是显 然还是第二种遍历的花费会更大 在这一题中, 遍历之后不需要回到出发点. f(i, j, 0): 表示遍

算法:poj 3628 Bookshelf 2(dfs, 01背包)

题目大意: 有n个数字(1-100W),现在有一个数b,1<=b<=s(s为n个数字之和).要从n 个数字中选择一些数字组合,有一写组合的数字之和x会大于等于b, 求所有x中x-b最小的是多少? 思路: 刚开始看到这题,发现数字这么大,以为内存不够不能用背包.而n最大才20,所以直接用 dfs+减枝0MS过了... 然后用背包,开了2000W+的数组,memset初始化,果断地MLE了...然后 看了下discuss,发现用memset会增加很多额外的内存. 于是改用for循环初始化,内存就够

算法:poj 3211 Washing Clothes(01背包)

题目大意: Dearboy和他的女朋友一起洗m件衣服,共有n总颜色(每件衣服只有一种颜色). 为 了放置不同颜色互染,每次只能洗一种颜色的衣服,在这件衣服洗完之前不能洗另外一种衣服. Dearboy和 他女朋友可以同时一起洗衣服,但是不能同时洗同一件衣服,也不能同时洗不同种颜色的衣服. 一 只每件衣服所需时间,问最少花费多少时间可以全部洗完. 分析: 首先可以很直观的判定, 一定是把一种颜色的所有衣服都洗完再接着洗另外一种颜色的衣服,洗每种颜色所有衣服的总时间是分开独 立的. 关键是洗同一种颜色