poj2718 Smallest Difference(dfs+特判,还可以贪心更快)
https://vjudge.net/problem/POJ-2718
其实不太理解为什么10超时了。。
这题似乎是有贪心优化的方法的,我下面直接暴力了。。
暴力之余要特判两个点:1.超时点就是n=10的时候,直接算一下247
2.WA点就是如果有两个数,且一个为0,那样不算先导零,结果按我的代码也是要特判的。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<map>
#include<set>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define INF 0x3f3f3f3f
typedef unsigned long long ll;
using namespace std;
char s[];
int a[], vis[], sum1, sum2, mini, n;
void dfs(int cur)
{
if(cur < n/){
for(int i = ; i < n; i++){
if(cur == &&a[i] == ) continue;//排除先导零
if(!vis[i]){
vis[i] = ;
sum1 = sum1*+a[i];
cur++;
dfs(cur);
sum1 = (sum1-a[i])/;
cur--;
vis[i] = ;
}
}
}
else if(cur == n){
mini = min(abs(sum2-sum1), mini);
}
else{
for(int i = ; i < n; i++){
if(cur == n/&&a[i] == ) continue;//排除先导零
if(!vis[i]){
vis[i] = ;
sum2 = sum2*+a[i];
cur++;
dfs(cur);
sum2 = (sum2-a[i])/;
cur--;
vis[i] = ;
}
}
} }
int main()
{
int t;
scanf("%d", &t);
char c = getchar();
while(t--){
gets(s);
int len = strlen(s);
n=, sum1 = , sum2 = , mini = INF;
for(int i = ; i < len; i++){
a[n++] = s[i++]-'';
}
if(n == ){//不特判就超时,只有这一条超时
printf("247\n");
continue;
}
else if(n == &&(a[]==||a[]==)){//如果只有两位,且有一位为0也要特判
printf("%d\n", max(a[], a[]));
continue;
}
dfs();
printf("%d\n", mini);
}
}
poj2718 Smallest Difference(dfs+特判,还可以贪心更快)的更多相关文章
- POJ 2718 Smallest Difference dfs枚举两个数差最小
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19528 Accepted: 5 ...
- (DFS、全排列)POJ-2718 Smallest Difference
题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ...
- POJ 2718 Smallest Difference(dfs,剪枝)
枚举两个排列以及有那些数字,用dfs比较灵活. dfs1是枚举长度短小的那个数字,dfs2会枚举到比较大的数字,然后我们希望低位数字的差尽量大, 后面最优全是0,如果全是0都没有当前ans小的话就剪掉 ...
- POJ-2718 Smallest Difference
http://poj.org/problem?id=2718 从一些数里面选择一个子集组成一个数,余下的数组成另外一个数,(数不能以0开头)问两个数的差的绝对值最小是多少! 不管是奇数还是偶数,要想绝 ...
- poj2718 Smallest Difference
思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...
- poj 2718 Smallest Difference(暴力搜索+STL+DFS)
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6493 Accepted: 17 ...
- 【POJ - 2718】Smallest Difference(搜索 )
-->Smallest Difference 直接写中文了 Descriptions: 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数. ...
- LintCode "The Smallest Difference"
Binary search. class Solution { int _findClosest(vector<int> &A, int v) { , e = A.size() - ...
- Smallest Difference(POJ 2718)
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6740 Accepted: 18 ...
随机推荐
- (6).NET CORE微服务 Micro-Service ---- AOP框架
AOP 框架基础 要求懂的知识:AOP.Filter.反射(Attribute). 如果直接使用 Polly,那么就会造成业务代码中混杂大量的业务无关代码.我们使用 AOP (如果不了解 AOP,请自 ...
- Java基础知识➣环境搭建与类型整理(一)
概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以 ...
- nginx做负载均衡 tomcat获得客户端真实ip
因项目需要做tomcat2台机器的负载均衡,配置好负载环境后,发现tomcat的日志一律是我前置nginx代理服务器的ip 通过百度教材发现需要修改nginx的配置文件,修改代理头信息,传递给后方,后 ...
- Telnet和SSH
1. 协议用途 Telnet和SSH用于远程访问服务器的的两大常用协议.利用它们,我们可以管理并监控生产服务器和企业服务器,更新服务器内核,安装最新的软件包和补丁,能够远程登录服务器,开展软件开发.测 ...
- python linux 源码安装Twisted
下载:1.首先找到需要的包访问:https://pypi.org/在搜索框中输入你要查找的包名,然后点击搜索2.选择要下载的包的版本,点击download files3.选择file Type为sou ...
- Python 实现红绿灯
一.通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥信号灯,一个线程做车辆,车辆行驶按红灯停,绿灯行的规则. #!/usr/bin/python # -*- ...
- excel怎么样批量将unix时间戳转化为北京时间
https://jingyan.baidu.com/article/63acb44afb1e2561fcc17e3f.html 1.单元格属性改变日期 2.使用公式: =(A2+8*3600)/864 ...
- Uniform Generator
Computer simulations often require random numbers. One way to generate pseudo-random numbers is via ...
- HDU 4614 Vases and Flowers 【线段树】+【二分】
<题目链接> 题目大意: 有n个花瓶,每个花瓶中只能放一朵花.两种操作,一种是从A开始放F朵花,如果有的花瓶中已经有花则跳过这个花瓶,往下一个花瓶放:第二种是将区间[A,B]之间花瓶中的花 ...
- NiftyNet开源平台使用
NiftyNet是一款开源的卷积神经网络平台,专门针对医学图像处理分析,上一篇博客已经详细介绍了这个平台,接下来让我简单介绍一下目前我了解到的使用方法.更详细的使用方法.以及配置过程请查看NiftyN ...