Route
Contact huatihui
2024-11-21 14:36:44
华体会,华体会体育,华体会体育官网,华体会靠谱吗,华体会APP(访问: hash.cyou 领取999USDT)
实 验 报 告 课程名称:算法设计与分析 班级 实验成绩: 实验名称:动态规划 学号: 批阅教师签字: 实验编号:实验二 姓名: 实验日期:20 年 月 日 指导教师:张莉 组号: 实验时间: 时 分- 时 分 一、实验目的 熟练掌握动态规划思想及教材中相关经典算法。 掌握用动态规划解题的基本步骤,能够用动态规划解决一些问题。 二、实验内容与实验步骤 找零钱问题(难度系数为3) ? 问题描述 设有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 三、实验环境 操作系统:Windows Server 2008 Enterprise Windows XP 集成开发环境:Visual Studio 2005 Visual Studio 2008 四、问题分析 五、问题解决 在t数组中存放的是硬币具体面值,从1到n;而iniJ则为实际要找的钱。而最关键的c(i,j)表示的是从第1 个到第i个硬币都可以选,要找的钱数是j,c(i,j)=找钱的硬币个数。 具体实现如同问题分析中一样。 int *t; int n=0; int iniJ=0; int **c; void makeC() { //置列0全为0 for(int line=1;line=n;line++) { c[line][0]=0; } //按列顺序执行! for(int lie=1;lie=iniJ;lie++) { if(lie%t[1]==0) { c[1][lie]=lie/t[1]; }else { c[1][lie]=1000; } //列中按行执行! for(int line=2;line=n;line++) { if(t[line]lie) { c[line][lie]=c[line-1][lie]; }else { c[line][lie]=min(c[line-1][lie],c[line][lie-t[line]]+1); } } } } 六、实验结果总结 回答以下问题: 算法实现的复杂度在问题规模很大时可以接受吗? 如果不用动态规划方法还能想到其他的解决方式吗?和动态规划相比会有更好的效率吗? 所选用的数据结构合适吗? 该算法都存在哪几类可能出现的情况,你的测试完全覆盖了你所想到的这些情况吗,测试结果如何? 叙述通过实验你对动态规划方法的理解及其优缺点 其它(你认为需要在此说明的) 答: 可以接受 暂时没想到。似乎分治法相当不错。 使用了指
搜索您想要找的内容!
地址:华体会- 华体会体育- 华体会体育官网 电话:@HASHKFK 手机:@HASHKFK
Copyright © 2012-2024 华体会体育户外滑雪培训设备有限公司 版权所有 非商用版本 ICP备案编号: