Find More Coins
2016-03-13 14:46
260 查看
———————————应要求删除———————————————
1.深度优先搜索
题意是给定总金额,硬币数值,输出恰好能够凑出总金额的硬币组合方法,由于是多解题,要求按字典序最小输出,处理这个字典序只需实现对数组进行排序,为了方便直接调用了stl::sort,然后在搜索的时候加上一些限定条件。
注意要考虑到重复金额的硬币,并由此作相应的剪枝操作,最后一个测试点估计含有大量无效重复数据,未给出恰当的剪枝优化就很容易TLE。
2.动态规划
状态转移方程:dp[ i ] [ j ] = max ( dp[ i - 1 ][ j - a[ i ] ] + a[ i ], dp[ i - 1 ][ j ] )
dp[ i ][ j ]代表在处理第i个硬币时,期望金额为j。存在两种可能性,用到了第i个硬币,没有用到第i个硬币。如果没有用到第i个硬币,说明在前一种情况,也就是处理i-1个硬币且期望金额为j,是当前的最优解。如果用到了,就要回到期望金额为 j - a[i ]的情况,并加上第i个硬币的价值,为当前最优解。判断是否使用第i个硬币由这两个值哪个更大决定。
1.深度优先搜索
题意是给定总金额,硬币数值,输出恰好能够凑出总金额的硬币组合方法,由于是多解题,要求按字典序最小输出,处理这个字典序只需实现对数组进行排序,为了方便直接调用了stl::sort,然后在搜索的时候加上一些限定条件。
注意要考虑到重复金额的硬币,并由此作相应的剪枝操作,最后一个测试点估计含有大量无效重复数据,未给出恰当的剪枝优化就很容易TLE。
2.动态规划
状态转移方程:dp[ i ] [ j ] = max ( dp[ i - 1 ][ j - a[ i ] ] + a[ i ], dp[ i - 1 ][ j ] )
dp[ i ][ j ]代表在处理第i个硬币时,期望金额为j。存在两种可能性,用到了第i个硬币,没有用到第i个硬币。如果没有用到第i个硬币,说明在前一种情况,也就是处理i-1个硬币且期望金额为j,是当前的最优解。如果用到了,就要回到期望金额为 j - a[i ]的情况,并加上第i个硬币的价值,为当前最优解。判断是否使用第i个硬币由这两个值哪个更大决定。
相关文章推荐
- 模板_计算几何
- Android 设置圆角按下改变颜色按钮
- SQLite Pragma语法
- javascript 核心基础语法
- 人机版五子棋两种算法概述
- 依据Right-BICEP要求的对四则运算2的测试
- 使用Loadrunner11录制MySQL协议脚本
- 设计模式_迭代器模式
- 类成员函数的重载、覆盖和隐藏
- 汇编 线程注入
- 唯爱小粽子:SpringMVC中DispatcherServlet详解
- VB.NET版机房收费系统---七仙女之系统登录
- 排序-冒泡,归并,快排区别
- Eclipse Plugin Installation and Windows User Access Control
- struts2 helloworld 的404错误
- 高德地图开发之第一篇
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- Search for a Range
- 集成Tomcat插件到Eclipse
- 学习进度条