贪心算法
来源:互联网 发布:idea java 代码混淆 编辑:程序博客网 时间:2024/06/02 01:35
贪心算法
找零钱问题
« 问题描述
设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱,可以实用的各种面值的硬币个数不限。当只用硬币面值T[1],T[2],…,T[i]时,可找出钱数j的最少硬币个数记为C(i,j)。若只用这些硬币面值,找不出钱数j时,记C(i,j)=∞。
« 编程任务
设计一个动态规划算法,对1≤j≤L,计算出所有的C( n,j )。算法中只允许实用一个长度为L的数组。用L和n作为变量来表示算法的计算时间复杂性
« 数据输入
由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n<=13),表示有n种硬币可选。接下来的一行是每种硬币的面值。由用户输入待找钱数j。
« 结果输出
程序运行结束时,将计算出的所需最少硬币个数输出到文件output.txt中。
输入文件示例
输出文件示例
input.txt
output.txt
3
1 2 5
9
3
代码:#include <stdio.h>
#include <stdlib.h>
#include<fstream.h>
int *price;
int *ret;
int change(int total,int array[],int begin,int end)//找零钱递归函数
{
if(total == array[begin])//total = 最大的面值,测试数据5=5
ret[begin]++;
else
{
while(begin<end)
{
if(total>array[begin])//测试数据9>5
{
ret[begin]++;
if (change(total-array[begin],array,begin,end))
return 1;
else
ret[begin]--;
}
begin++;
}
return 0;//测试数据0<1
}
return 1;//测试数据5>5
}
int main(int argc,char** argv)
{
ifstream in("input.txt");//打开输入文件
ofstream out("output.txt");//打开输出文件
int n;
in>>n;//从输入文件读入零钱面值数目到n
price=(int *)malloc(sizeof(int)*(n+1));
ret=(int *)malloc(sizeof(int)*(n+1));
ret[0]=0;
price[0]=0;
for(int j =1;j<=n;j++)
{
ret[j]=0;
in>>price[n-j+1];//从输入文件从大到小读入零钱面值到price[n-j-1]
}
int money;
in>>money;//从输入文件读如要找零钱到money
int i = 0;
change(money,price,1,n);//找零钱递归函数
int sum = 0;
for(i=0; i<=n; i++)
sum+=ret[i];
out<<sum;//记录所需零钱最小数到输出文件
out<<endl;
system("type output.txt");//显示输出文件
in.close;//关闭输入文件
out.close;//关闭输出文件
system("pause");
return 0;
}
- 【贪心】贪心算法总结
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- 贪心算法
- (Google面试题)有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。
- 常见面试之机器学习算法思想简单梳理
- explicit
- 编译BusyBox建立Linux根文件系统
- 在windowsXP系统中使用Eclipse开发Android动态库so(一):第一个测试so
- 贪心算法
- 博科300 光纤交换机的配置
- Java中将word生成缩略图
- 框架的概念及用反射技术开发框架的原理
- 输入年月日判断是第几天
- 《Android应用程序开发与典型案例》完整版
- python之yield篇
- ios--生命周期+性能优化
- Python脚本删除VC临时文件及Debug目录