博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4702: 分糖果系列一
阅读量:7011 次
发布时间:2019-06-28

本文共 1881 字,大约阅读时间需要 6 分钟。

Description

 

Oliver分别有币值为1,3,5,7,9,13元的硬币a,b,c,d,e,f枚。一天她去大学生超市买糖吃,糖的价格为g元。

问:用Oliver仅有的这6种硬币去恰好购买这g元的糖果,最少需要支付多少个硬币?(当不能支付时输出“impossible”)

 

Input

 

输入数据有多组(当输入连续的7个零时,结束。该组数据不做处理)

每组数据依次输入币值为1,3,5,7,9,13元的硬币的个数,以及糖果的价格g。

 

Output

 

输出数据有多组,每组数据一行,为需要支付的最少硬币个数。

 

Sample Input

 

1 1 0 0 0 0 10

1 1 1 1 1 1 38
0 0 0 0 0 0 0

Sample Output

impossible

6

题意很简单,暴力不可以

要用dp背包

我们可以先想下简单的01背包就是倒着来少一层循环的,就像这样

先循环容量和价值,这样就能只放一次,然后就是从大往小背,如果从小往大,那么一个东西可能会被多加(就是可重复选择)

(01背包求选任意个的最大价值) #include
#include
#include
using namespace std;int vol[1005],price[1005],dp[1005];int main(){ //freopen("1.in", "r",stdin); int T; cin>>T; while(T--) { int n,m; cin>>n>>m; for(int i=0;i
>price[i]; for(int i=0;i
>vol[i]; memset(dp,0,sizeof(dp)); for (int i = 0; i < n; i++) { for (int j = m; j >=vol[i]; j--) { dp[j] = max(dp[j - vol[i]] + price[i], dp[j]); } } cout<
<<"\n"; }}

而这个题目其实就相当于对背包的数量进行扩充,其实也等于让他再背硬币枚数次,当然你也可以把它全加在里面。

#include 
#include
#include
using namespace std ;const int a[8]={
0,1,3,5,7,9,13},INF=1e9;int b[8];int dp[100005];int main(){int m ,num ;while(~scanf("%d%d%d%d%d%d%d",&b[1],&b[2],&b[3],&b[4],&b[5],&b[6],&m)){ int s=m; for(int i=1;i<7;i++) s+=b[i]; if(s==0)break; for(int i=1;i<=m;i++) dp[i] = INF; for(int i = 1 ;i <= 6; i++) for(int j = 1 ; j <= b[i] ; j++) for(int k = m ; k >= a[i] ; k-- ) { dp[k] = min(dp[k-a[i]] +1,dp[k]); } if(dp[m]==INF)printf("impossible\n"); else printf("%d\n",dp[m]);}return 0 ;}
View Code

 

转载于:https://www.cnblogs.com/BobHuang/p/6820520.html

你可能感兴趣的文章
修改vim的配色方案
查看>>
程矢Axure夜话:程序员眼中的原型设计视频教程之书到用时方恨少
查看>>
网站降权怎么办
查看>>
esxi 4.x升级至5.0
查看>>
Hibernate中save、persist和saveOrUpdate这三个方法的区别
查看>>
c++去掉字符串中连续的空格,只保留一个
查看>>
按钮动画学习2
查看>>
我的友情链接
查看>>
纯靠内链提权重
查看>>
linux因环境变量修改错误,造成命令查找不到,且无法登陆系统解决办法
查看>>
元芳,你怎么看,网络为何会如此流行!
查看>>
计算机运行命令全集
查看>>
Android项目之旅三 简易Mp3播放器从获取服务器端Mp3信息
查看>>
将一个数组中的奇元素全部移到数组的前半部分,即将奇偶元素分开
查看>>
无需SDK的统计工具,让哥赚了个iphone6
查看>>
没有做数据备份 网站随时毁于一旦
查看>>
Python学习笔记
查看>>
js中json与字符串转换小例子
查看>>
学习笔记-实验楼项目课(Linux桌面字典)
查看>>
Spring基础问答
查看>>