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+特判,还可以贪心更快)的更多相关文章

  1. POJ 2718 Smallest Difference dfs枚举两个数差最小

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19528   Accepted: 5 ...

  2. (DFS、全排列)POJ-2718 Smallest Difference

    题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ...

  3. POJ 2718 Smallest Difference(dfs,剪枝)

    枚举两个排列以及有那些数字,用dfs比较灵活. dfs1是枚举长度短小的那个数字,dfs2会枚举到比较大的数字,然后我们希望低位数字的差尽量大, 后面最优全是0,如果全是0都没有当前ans小的话就剪掉 ...

  4. POJ-2718 Smallest Difference

    http://poj.org/problem?id=2718 从一些数里面选择一个子集组成一个数,余下的数组成另外一个数,(数不能以0开头)问两个数的差的绝对值最小是多少! 不管是奇数还是偶数,要想绝 ...

  5. poj2718 Smallest Difference

    思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...

  6. poj 2718 Smallest Difference(暴力搜索+STL+DFS)

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6493   Accepted: 17 ...

  7. 【POJ - 2718】Smallest Difference(搜索 )

    -->Smallest Difference 直接写中文了 Descriptions: 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数. ...

  8. LintCode "The Smallest Difference"

    Binary search. class Solution { int _findClosest(vector<int> &A, int v) { , e = A.size() - ...

  9. Smallest Difference(POJ 2718)

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6740   Accepted: 18 ...

随机推荐

  1. js 函数参数为什么是按值传递?

    首先说下,在js中有两大类数据类型: 基本类型和引用类型. 其次,基本类型有5种: Undefined,Null,Boolean,Number.String, 引用类型有一种: Object(Func ...

  2. Javascript转义字符串中的特殊字符处理

    Web应用系统中,客户端发送请求到服务器,请求中的字符串参数,在被序列化成json过程中有些特殊字符会被空格代, 导致传递到服务器端再解析的时候,原本的输入参数就会被改变. 目前遇到的特殊字符有加号( ...

  3. git之一: git基础

    参考: SourceTree使用 git教程 廖学风git  文档1 文档2 1. git 概念介绍 工作区: 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区,工作区下面有. ...

  4. 复制数组之System.arraycopy()的使用

    System.arraycopy(src, srcPos, dest, destPos, length); [参数说明](注:arraycopy是一个古老的方法,从jdk1.0就有了,而当时命名并不规 ...

  5. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第四集之安装Linux】

    1,确保Linux镜像的路径存在 2,启动 3,在真实机情况下,进入BIOS修改安装操作系统的路径[记住:虚拟机不需要这一步.] 如果是真实机安装Linux,默认是从硬盘中安装,而不是从光盘.这就需要 ...

  6. JavaSE| 面向对象-类的五大成员

    面向对象 面向对象只是其中一种编程思想,还有很多其他的编程思想:面向过程.面向切面.面向服务编程... 面向过程的思维方式:注重步骤.过程,面向过程强调的是功能行为: 面向对象的思维方式:关注的是“对 ...

  7. K线图

    1.程序 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  8. 转 国内的go get问题的解决

    转 国内的go get问题的解决     go get golang.org/x 包失败解决方法 由于各种问题,国内使用 go get 安装 golang 官方包可能会失败,如我自己在安装 colli ...

  9. 常见素数筛选方法原理和Python实现

    1. 普通筛选(常用于求解单个素数问题) 自然数中,除了1和它本身以外不再有其他因数. import math def func_get_prime(n): func = lambda x: not ...

  10. python 配置导入方式

    许多连接,如 from setting import redis_config pool= redis.ConnectionPool(**redis_config) r=redis.Redis(con ...