A 暴力搜索 剪枝是关键

Description

盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:
老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?

Input

首先是一个正整数T,表示有T组测试数据
每组测试数据是一个正整数n(1<=n<=10^6)

Output

对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行

Sample Input

2
9
7

Sample Output

504
210

 1 # include <cstdio>
 2 # include <cstring>
 3 # define LL long long
 4 using namespace std ;
 5
 6 LL gcd(LL a,LL b)
 7 {   if(b==0)
 8       return a;
 9     return gcd(b,a%b);
10 }
11
12 LL lcm(LL a,LL b)
13 {
14     return a/gcd(a,b)*b;
15 }
16
17
18 int main ()
19 {
20    // freopen("in.txt","r",stdin) ;
21     int T ;
22     scanf("%d" , &T) ;
23     while (T--)
24     {
25         LL n ;
26         scanf("%I64d" , &n) ;
27         LL i , j , k , Max = 0;
28         LL t ;
29
30         for (i = n ; i >= 1 ; i--)
31         {
32             if (i*i*i < Max)
33                      break ;
34
35             for (j = n ; j >= 1 ; j--)
36             {
37                 if (i*j*j < Max)
38                      break ;
39
40                 for (k = n ; k >= 1 ; k--)
41                 {
42                     if (i*j*k < Max)
43                      break ;
44                      t = lcm(i,lcm(j,k)) ;
45                        if (t > Max)
46                          Max = t ;
47
48                 }
49             }
50         }
51         printf("%I64d\n" , Max) ;
52     }
53
54
55
56     return 0 ;
57 }

时间: 2024-10-19 06:32:06

A 暴力搜索 剪枝是关键的相关文章

poj 1054 The Troublesome Frog (暴力搜索 + 剪枝优化)

题目链接 看到分类里是dp,结果想了半天,也没想出来,搜了一下题解,全是暴力! 不过剪枝很重要,下面我的代码 266ms. 题意: 在一个矩阵方格里面,青蛙在里面跳,但是青蛙每一步都是等长的跳, 从一个边界外,跳到了另一边的边界外,每跳一次对那个点进行标记. 现在给你很多青蛙跳过后的所标记的所有点,那请你从这些点里面找出 一条可能的路径里面出现过的标记点最多. 分析:先排序(目的是方便剪枝,break),然后枚举两个点,这两个 点代表这条路径的起始的两个点.然后是三个剪枝,下面有. 开始遍历时,

浅谈搜索剪枝

搜索是OI之路上,人人必会的强大算法.自古便有名言:"暴力进省队"(实际上,很多考试你打好所有暴力就可以拿到不错的分数). 在考场上,搜索常常是与正解的对拍板子(当然有时搜索就是正解),且一般搜索都会有20~30分. 而想要写好搜索,剪枝必不可少(有时出题人不会给纯暴力分). what is 剪枝? 常用的搜索有Dfs和Bfs. Bfs的剪枝通常就是判重,因为Bfs寻找的是步数最少,重复的话必定不会在之前的情况前产生最优解. 深搜,它的进程近似一颗树(通常叫Dfs树). 而剪枝就是一种

HDU 5113--Black And White(搜索+剪枝)

题目链接 Problem Description In mathematics, the four color theorem, or the four color map theorem, states that, given any separation of a plane into contiguous regions, producing a figure called a map, no more than four colors are required to color the

ACM 暴力搜索题 题目整理

UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vector> #include<cmath> #include<map> #include<algorithm> #include<cstring> #include<cstdio> #include<cstdlib> #include

[暴力搜索] POJ 3087 Shuffle&#39;m Up

Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10003   Accepted: 4631 Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks o

【搜索剪枝】HDU 5469 Antonidas

通道 题意:给出1字母树,询问一字符串是否出现在该树中 思路:直接搜索剪枝,有人点分治?写了几发都T了..有人会了教我? 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct Edge { int v, nxt; Edge () { } Edge (int _v, int _n) { v = _v, nxt = _n; } }; const in

HDU 3699 A hard Aoshu Problem (暴力搜索)

题意:题意:给你3个字符串s1,s2,s3;要求对三个字符串中的字符赋值(相同的字符串进行相同的数字替换), 替换后的三个数进行四则运算要满足左边等于右边,求有几种解法. Sample Input 2 A A A BCD BCD B Sample Output 5 72 eg:ABBDE   ABCCC   BDBDE :令 A = 1, B = 2, C = 0, D = 4, E = 5 12245 + 12000 = 24245: 注意没有前导零!! #include<stdio.h>

HDU 4499 Cannon (暴力搜索)

题意:在n*m的方格里有t个棋子,问最多能放多少个炮且每个炮不能互相攻击(炮吃炮) 炮吃炮:在同一行或同一列且中间有一颗棋子. #include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <queue> #include <math.h> #define M 50 #define LL long long using

USACO/fence8 迭代加深搜索+剪枝

题目链接 迭代加深搜索思想. 枚举答案K,考虑到能否切出K个木头,那么我们当然选最小的K个来切. 1.对于原材料,我们是首选最大的还是最小的?显然,首选大的能够更容易切出,也更容易得到答案. 2.对于目标木头,我们是优先得到最大的还是最小的?显然,由于K个木头我们都要得到,那么当然先把最大的(最难得到的)先得到,这种搜索策略更优. 3.假设总原材料为all,前K个木头总和为sum,那么all-sum就是这一次切割过程中能[浪费]的最大数目.对于一个切剩下的原材料,若它比最小的目标木头还要小,则它