sdau三 1018
来源:互联网 发布:纹理合成算法 编辑:程序博客网 时间:2024/06/04 19:16
问题:
有一扑满,有多种硬币,每种硬币价值重量不同,每种硬币数量无限。要把扑满装满,求扑满中的最少能装多少钱。
input:
输入n,后有n组事例,输入空扑满和装满钱的扑满的重量,输入m,后有m组硬币,各有价值v与重量w
out:
输出最小价值或输出不可能(若装不满)
simple input:
simple output:310 11021 130 5010 11021 150 301 6210 320 4
分析: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.
一定要装满的完全背包问题。求最小值,所以关键是要将dp数组初始化为正无穷,然后套完全背包模板就好
代码:
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int p,w,dp[10001];const int INF=100000000000;int main(){ //freopen("s.txt","r",stdin); int t; cin>>t; while(t--){ int s1,s2,s,n,i,j; cin>>s1>>s2; s=s2-s1; cin>>n; for(i=1;i<=s;i++) dp[i]=INF; for(i=1;i<=n;i++){ cin>>p>>w; for(j=w;j<=s;j++) dp[j]=min(dp[j],dp[j-w]+p); } if(dp[s]!=INF) cout<<"The minimum amount of money in the piggy-bank is "<<dp[s]<<"."<<endl; else cout<<"This is impossible."<<endl; } return 0;}
0 0
- SDAU练习三1018
- sdau三 1018
- 2016SDAU编程练习三1018
- 2016SDAU课程练习三1018
- SDAU练习三 10001
- SDAU练习三1001
- SDAU练习三1003
- SDAU练习三1004
- SDAU练习三1005
- SDAU练习三 1008
- SDAU练习三 1014
- sdau练习三1016
- SDAU练习三1017
- SDAU练习三1023
- SDAU练习三1019
- SDAU练习三1020
- SDAU练习三1024
- sdau三 1001
- vsftpd配置文件详解
- PAT 甲级 1027 Colors in Mars
- fizzbuzz的机器学习解法
- 2016年最新黑马安卓第74期就业班不加密视频教程
- HDU 1074 Doing Homework(状压DP)
- sdau三 1018
- 飛飛(五十)输入输出运算符重载(cerr的用法)
- iOS编程(1)TabBarController
- RxJava之defer操作符
- 特征工程
- TR069协议详解
- 【bzoj4530】【BJOI2014】【大融合】【dfs序+线段树合并+并查集】
- 【SWUSTOJ】1003: 你来做裁判(排序)
- ubuntu 命令记录