[DP-完全背包] HDU 1114
来源:互联网 发布:复古照片相关软件 编辑:程序博客网 时间:2024/06/06 19:24
题意
给出存钱罐本身的重量和装钱后的重量,以及存钱罐中钱的面值和重量,求存钱罐装满时,钱的总和最小是多少
思路
完全背包解题,每种钱币都可以装无限个,注意初始化的值
每种硬币的数量都不限制,因此是个完全背包。初始化dp数组时需注意,因为求的最小,且题目的意思是恰好装满,所以dp数组初始化为INF,但dp[0] = 0,意为此时只有容量为0 的背包可以在什么也不装且价值为0 的情况下被“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态(背包九讲)
dp[ i ] = min ( dp[ i ], dp[ i - w[ j ] ] + v[ j ] );
代码
#include <algorithm>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#define N 10005#define INF 0x7f7f7f7fusing namespace std;int v[ N ], w[ N ]; // value weightint dp[ N ];int knapsack ( int n, int wei ) { memset ( dp, INF, sizeof ( dp ) ); dp[ 0 ] = 0; for ( int i = 1; i <= wei; ++i ) { for ( int j = 0; j < n; ++j ) { if ( i >= w[ j ] ) dp[ i ] = min ( dp[ i ], dp[ i - w[ j ] ] + v[ j ] ); } } return dp[ wei ];}int main () { int T; scanf ( "%d", &T ); while ( T-- ) { int E, F; scanf ( "%d%d", &E, &F ); int n; scanf ( "%d", &n ); for ( int i = 0; i < n; ++i ) scanf ( "%d%d", &v[ i ], &w[ i ] ); int sol = knapsack ( n, F - E ); if ( sol != INF ) printf ( "The minimum amount of money in the piggy-bank is %d.\n", sol ); else printf ( "This is impossible.\n" ); } return 0;}
阅读全文
0 0
- DP 完全背包 hdu 1114
- HDU 1114 完全背包dp
- [DP-完全背包] HDU 1114
- HDU 1114 1248(DP,完全背包)
- 【DP|完全背包】HDU-1114 Piggy-Bank
- HDU 1114 Piggy-Bank(完全背包 DP)
- HDU 1114 Piggy-Bank(完全背包 DP)
- HDU 1114 (dp 完全背包)
- 【HDU 1114】Piggy-Bank(DP-完全背包)
- DP--完全背包--HDU - 4508
- DP完全背包 HDU 1248
- HDU 1114 Piggy-Bank--DP--(裸完全背包)
- HDU 1114 Piggy-Bank(dp完全背包)
- HDOJ(HDU).1114 Piggy-Bank (DP 完全背包)
- 【HDU 1114】Piggy-Bank(dp||完全背包问题)
- hdu 1114 完全背包
- hdu 1114 完全背包
- HDU-1114 完全背包
- Java算法面试题(006) 相遇问题(阿里)
- Numpy
- 机器学习的方法
- 问题记录 lua赋值函数类型后传参执行没效果
- Flink源码阅读:如何使用FlinkKafkaProducer将数据在Kafka的多个partition中均匀分布
- [DP-完全背包] HDU 1114
- JVM
- Problem G: 字符统计
- 微软人工智能和对话平台--知识商城体验
- 实验进行中:.NET WebAssembly支持
- 有趣的开源软件:语音识别工具Kaldi (二)
- php 获取pointer 类型的数据 leanclude
- 在施工中三级配电箱一级配电箱经常跳闸分析
- 171215---LAMP介绍之http安装