1 2 5 10 20 --> 800
2015-01-07 10:43
92 查看
用1元 2元 5元 10元 20元的钞票凑成800元的方法种数计算,使用了动态规划。
结果没打出来,只是保留在函数里各个vector中,调试可看所有结果。
优点:快
缺点:占空间占内存
耗时时间测试:
和为200:0.0022153191s
和为800:0.025958383s
和为1600:0.062776931s
和为3200:0.18964779s
下面是详细代码,能正常运行算出结果,改进空间很大,只列了思路。
算法为王,C写的O(n2)函数再快也不如R写的O(nlogn)函数。
结果没打出来,只是保留在函数里各个vector中,调试可看所有结果。
优点:快
缺点:占空间占内存
耗时时间测试:
和为200:0.0022153191s
和为800:0.025958383s
和为1600:0.062776931s
和为3200:0.18964779s
下面是详细代码,能正常运行算出结果,改进空间很大,只列了思路。
算法为王,C写的O(n2)函数再快也不如R写的O(nlogn)函数。
void CMFCTestDlg::OnBnClickedBegin() { UpdateData(TRUE); LARGE_INTEGER beginTime; QueryPerformanceCounter(&beginTime); std::vector<int> vec_1_2(m_nTotal+1, -1); for(int i=0; i<=m_nTotal; i++) { vec_1_2[i] = 1+i/2; // 使用1元 2元纸币组合成 0到m_nTotal 元的方法数 } std::vector<int> vec_1_2_5(vec_1_2.begin(), vec_1_2.end()); for(int i=5; i<=m_nTotal; i++) { for(int j=1; j<=i/5; j++) { vec_1_2_5[i] += vec_1_2[i-j*5]; // 使用1元 2元 5元纸币组合成 0到m_nTotal 元的方法数 } } std::vector<int> vec_1_2_5_10(vec_1_2_5.begin(), vec_1_2_5.end()); for(int i=10; i<=m_nTotal; i++) { for(int j=1; j<=i/10; j++) { vec_1_2_5_10[i] += vec_1_2_5[i-j*10]; // 使用1元 2元 5元 10元纸币组合成 0到m_nTotal 元的方法数 } } std::vector<int> vec_1_2_5_10_20(vec_1_2_5_10.begin(), vec_1_2_5_10.end()); for(int i=20; i<=m_nTotal; i++) { for(int j=1; j<=i/20; j++) { vec_1_2_5_10_20[i] += vec_1_2_5_10[i-j*20]; // 使用1元 2元 5元 10元 20元纸币组合成 0到m_nTotal 元的方法数 } } //.... 如果有50元 100元等更多要求,在此处依次添加即可,很容易扩展 LARGE_INTEGER endTime; QueryPerformanceCounter(&endTime); LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); float fTime = (endTime.QuadPart-beginTime.QuadPart)/(float)(frequency.QuadPart); fTime = 0; }
相关文章推荐
- 从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆
- y = x (x>1) ||y = 2*x-1 (1<x<10) ||y = 3*x-11 (x>=10)
- 分支-20 计算符号函数的值(10)
- 16进制、10进制、字符串、中文、byte[]相互转换--->java版
- < 笔记 > Python - 10 Python IO
- 100元随机分给10个人 最多20 最少0.01
- 10+20=30
- 【Head First Servlets and JSP】笔记20:EL以及<jsp:useBean ....>的补充
- 【UIKit-124-10】#import <UIKit/UIView.h>
- 求质数算法的N种境界(N>10)
- Dcook -> MJRefresh iOS10的系统上每次下拉刷新后没办法完全恢复Normal 状态 Y轴距离上总是相差20左右...(楼主个人也使用的MJ,表示暂时没有发现这个问题)
- 从零开始学_JavaScript_系列(20)——js系列<7>(函数原型的两种声明方式、函数的作用域)
- 数字 1 转换成 “一” (10-> “十”,25-> “二十五”,.....)
- <NOIP> 10 . P1423 小玉在游泳
- <汇编语言>实验10_3(2)
- 【Foundation-10-2】#import <Foundation/NSArray.h>
- PAT 10-0. 说反话 (20)
- 求1-10,20-30,45-60三个区间数字的总和
- 10-0. 说反话 (20)
- 10-2. 删除字符串中的子串(20)