POJ3977(折半枚举)
来源:互联网 发布:acfunfix.js 编辑:程序博客网 时间:2024/05/02 02:38
原来一直以为的map.lowerbound和upperbound是错的。。。
学习了make_pair
#include <iostream>#include <cstdio>#include <map>#include <cstring>#include <math.h>using namespace std;typedef long long LL;const int maxn = 1000000+10;map <LL ,LL > M;int n;LL s[maxn];LL abs (LL x){ return x > 0? x:-x;}int main(){ while(scanf("%d",&n)!=EOF && n) { memset(s,0,sizeof(s)); M.clear(); for(int i=0 ;i<n;i++) { scanf("%lld",&s[i]); } pair<LL,LL> ans(abs(s[0]),1); long long m = 1 << (n/2); for(int i=1;i<m;i++) { LL sum = 0 ; LL k = 0; for(int j=0;j<(n/2);j++) { if(i & (1 << j)) { sum += s[j]; k++; } } ans = min(ans , make_pair(abs(sum),k)); if(M[sum]) M[sum] = min(M[sum],k); else M[sum] = k; } for(int i=1;i<(1<<(n-n/2));i++) { LL sum =0 ; LL k = 0; for(int j=0;j<(n-n/2);j++) { if(i & (1<<j)) { k++; sum += s[j+n/2]; } } ans = min(ans , make_pair(abs(sum),k)); map<LL,LL> :: iterator it = M.lower_bound(-sum); if(it != M.end()) { ans = min(ans , make_pair(abs(it->first+sum),it->second+k)); } if(it != M.begin()) { it--; ans = min(ans , make_pair(abs(it->first+sum),it->second+k)); } } cout << ans.first << " " << ans.second << endl; } return 0;}
阅读全文
0 0
- POJ3977(折半枚举)
- poj3977 Subset(折半枚举)
- poj3977(折半枚举,多坑)
- 折半枚举--poj3977
- POJ3977 Subset 折半枚举
- poj3977 Subset 折半枚举
- POJ3977-Subset 折半枚举
- poj3977(折半搜索)
- 折半搜索 poj3977
- poj2785(折半枚举)
- poj2549(折半枚举)
- POJ2785 (折半枚举)
- poj3977Subset (折半枚举)
- poj3977
- poj3977
- 折半枚举(双向搜索)
- poj2785(二分折半枚举)
- 折半枚举(双向搜索)
- [CQOI2015]网络吞吐量
- Maven管理的jar没有发布到WEB-INF/lib下的解决方案
- LeetCode:Convert Sorted List to Binary Search Tr
- javascript var声明变量提升
- python下在txt指定行追加文本
- POJ3977(折半枚举)
- mybatis
- 【Source Insight】Source Insight 4.X 破解教程
- OKhttp网络请求组件的封装
- Android 热修复 关于接入Tinker所遇到的错误
- 简单的ajax+spring使用
- WebSocket原理
- IP地址
- 优化一个新站会比老站更有优势?