POJ2718
来源:互联网 发布:php网站修改教程 编辑:程序博客网 时间:2024/06/06 02:36
题意:给出最多10个数字,将它们划分为两个整数,求差异值最小的值(除非只有一位数,否则不允许出现先导0)题解:很显然如果总共有n个数,必然有一个整数长n/2,另一个长n-n/2,dfs搜一遍即可。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int inf=0x3f3f3f3f;int a[12],b[12],n,ans;bool vis[12];void solve(int aa)//use brute search directly{ int len=0; int bb=0; for(int i=0;i<n;i++) if(!vis[i]) b[len++]=a[i],bb=bb*10+a[i]; if(b[0]!=0||len==1) ans=min(ans,abs(aa-bb)); while(next_permutation(b,b+len)) { bb=0; for(int i=0;i<len;i++) bb=bb*10+b[i]; if(b[0]!=0||len==1) ans=min(ans,abs(aa-bb)); }}void dfs(int k,int res){ if(k==n/2) { solve(res); return; } for(int i=0;i<n;i++) { if(!vis[i]) { if(a[i]==0&&k==0&&n>3) continue; vis[i]=true; dfs(k+1,res*10+a[i]); vis[i]=false; } }}int main(){ int T; for(scanf("%d ",&T);T;T--) { n=0; char ch; while((ch=getchar())!='\n') { if(ch==' ') continue; a[n++]=ch-'0'; } ans=inf; memset(vis,false,sizeof(vis)); dfs(0,0); printf("%d\n",ans); } return 0;}
- POJ2718
- poj2718
- poj2718
- poj2718
- poj2718 穷举
- 搜索 POJ2718
- POJ2718【DFS】
- package poj2718;
- package poj2718;
- POJ2718题解
- POJ2718(枚举 + 贪心)
- 特殊dfs--poj2718
- poj2718 Smallest Difference
- poj2718 Smallest Difference
- POJ2718---Smallest Difference
- [dfs]poj2718 Smallest Difference
- POJ2718-Smallest Difference
- Smallest Difference poj2718
- C语言不支持布尔型数据类型
- Android FragmentManage FragmentTransaction介绍
- 图像去噪算法简介
- 如何利用Hql查询表中部分属性并在jsp中显示出来
- ACM学习-POJ-1182-食物链
- POJ2718
- 频道认领
- 搜索引擎–Python下开源爬虫(spider)框架scrapy的使用
- 网站管理员应该知道的 301重定向
- Linux小技巧之history命令用法15例
- Iterative Tree Traversal
- Java中hasNext()和next()的一种实现方法
- 百度地图的静态地图
- 在vs2010下编译OpenSSL