最少的硬币(线性规划)
来源:互联网 发布:0信誉淘宝店铺转让 编辑:程序博客网 时间:2024/06/01 07:16
现在我们有面值为1,3,5元的硬币若干枚,想要用最少的硬币个数凑够n元。
这是一个线性规划的问题。
既然是线性规划,就要定义状态,并推算出状态转移方程。
定义状态f[i]为凑够i元需要的最少的硬币数。
这里用顺推,从i=0开始,不需要硬币来凑,f[0]=0。
i=1,f[1]=f[1-1]+1=f[0]+1=1;
i=2,f[2]=f[2-1]+1=f[1]+1=2;
i=3,(注意这里开始不一样了,因为存在面值为3的硬币)。如果还按前面的做法,得到f[3]=f[3-1]+1=f[2]+1=3。但是这里有另一种可能,也就是用面值为3的硬币,容易得到f[3]=1。而题目要求是用最少的硬币,显然第二种更符合,所以f[3]=1。
i=4,f[4]=f[4-1]+1=f[3]+1=2。
同样的,当i=5的时候,就应该考虑还有面值为5 的硬币。f[5]=f[5-1]+1=f[4]+1=3。如果用面值为5 的硬币,容易得到f[5]=1。
…………
以此类推能够得到状态转移方程,f[i]=min{f[i-vj]+1};vj<=i。
Talk is cheap,show the code.
#include<stdio.h>int main(){ int f[1005],n; while(scanf("%d",&n)==1) { f[0]=0; for(int i=1;i<=1000;i++) { int minn=0x3f3f3f; for(int j=1;j<=5;j+=2) { if(minn>f[i-j]+1) { minn=f[i-j]+1; } } f[i]=minn; } printf("%d\n",f[n]); } return 0;}
0 0
- 最少的硬币(线性规划)
- 使用最少的硬币
- 最少硬币
- 最少硬币问题(动态规划解决)
- 最少硬币问题(多重背包问题)
- 最少硬币(动态规划法,初级)
- 零钱找零问题 总结 (最少的硬币数 ,所有组合数)
- 动态规划01背包问题(最少硬币问题、开心的小明,01背包问题)
- 最少硬币问题
- 最少硬币问题
- 最少硬币问题
- 【dp】最少硬币问题
- 最少硬币问题
- 最少硬币找零问题
- 最少硬币问题
- 最少硬币问题
- 最少硬币问题
- 最少硬币问题
- servlet中请求转发forword与重定向sendredirect区别
- 基于Udp的永远在线业务传输心跳数据包的方法
- realloc,malloc,calloc的区别
- 高阶篇:4.3)DFMEA设计失效模式和失效后果分析
- 打印日志的时机
- 最少的硬币(线性规划)
- Python3 float与内存四字节互转
- 文章标题
- hihocoder #1467 : 2-SAT·hihoCoder音乐节
- 毕业设计的坑--天气系统的设计(6)
- POJ2389 —— 高精度乘法
- 积累--创建自己的网站(前端)
- 大视野OJ:1607 Patting Heads(篩素法||贡献统计)
- Linux中mprotect()函数的用法