gym Learning to Add 一个水题 结果看错题意了
2015-09-24 21:28
197 查看
题意:给你不超过五个数,然后挨个加起来,但是每加一个数得到的结果可能会把各个位弄乱,问到最后最大的结果是什么?
例子:
5
42 1 3 3 6
过程:
• 0 + 42 = 42
• 42 + 1 = 43
• 43 + 3 = 46
• 46 + 3 = 94
• 94 + 6 = 100
思路:我擦,我没看到题目中的one by one,想了一个小时,结果回头一看,我艹,挨个加起来,那就直接dfs一下,对每个中间结果各位进行全排列即可:
例子:
5
42 1 3 3 6
过程:
• 0 + 42 = 42
• 42 + 1 = 43
• 43 + 3 = 46
• 46 + 3 = 94
• 94 + 6 = 100
思路:我擦,我没看到题目中的one by one,想了一个小时,结果回头一看,我艹,挨个加起来,那就直接dfs一下,对每个中间结果各位进行全排列即可:
#include <algorithm> #include <iostream> #include <cstdio> #include<algorithm> using namespace std; int N; int A[10]; int mx=0; void dfs(int x, int sum) { if( x==N){ mx = max(mx, sum); return; } int num[10] = {0}; sum += A[x]; int ans = sum; int n = 0; while( ans ){ num[n++]=ans%10; ans/=10; } sort(num,num+n); while(1) { int t = 0; for(int i = 0; i < n; i++) t *= 10, t += num[i]; dfs(x+1, t); if( !next_permutation(num, num+n) ) break; } return; } int main() { scanf("%d", &N); for(int i = 0; i < N; i++) scanf("%d", &A[i]); dfs(0, 0); printf("%d\n", mx); }
相关文章推荐
- 第一次接触java
- Ubuntu 12.04和centos 7 ip的设置方法
- HDU - 3449 Consumer(有依赖的背包问题)
- CSS3基础
- IOS每天15个注意点系列之UI-tableView
- Android0924(事件传递、手势操作)
- IOS SEL类型
- VC++6_0调试篇:变量的观察--watch窗口的技巧
- SQL查询顺序
- hdu1426搜索
- XMPP didReceivePresenceSubscriptionRequest函数不执行解决办法
- 通过bundle对象实现Fragment之间的传值
- lintcode-线段树的构造-201
- 【Android】openGL单位光的问题
- win7跨网段共享解决方法
- 实现读入一个彩色视频文件并以灰度格式输出这个视频文件,学习opencv例2-10
- 电源选型
- [转]漫谈数据中心CLOS网络架构
- eclipse struts2 错误及解决方法
- popupWindow的用法(1)