first blood(15程序设计大赛)暴力搜索,剪枝是关键

First Blood

题目描述

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

输入

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

输出

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

样例输入

2

9

7

样例输出

504

210

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 #define ll long long
 5 ll gcd(ll a,ll b)
 6 {
 7     if(b==0)
 8         return a;
 9     return gcd(b,a%b);
10 }
11 ll dd(ll a,ll b)
12 {
13     return a/gcd(a,b)*b;
14 }
15 int main()
16 {
17     int N;
18     scanf("%d",&N);
19     while(N--)
20     {
21         ll i,j,k,z,a;
22         cin>>a;
23         ll max=0;
24         for(i=a;i>0;i--)
25         {
26             if(i*i*i<max)
27                 break;
28             for(j=a;j>0;j--)
29             {
30                 if(i*j*j<max)
31                     break;
32                 for(k=a;k>0;k--)
33                 {
34                     if(i*j*k<max)
35                         break;
36                     z=dd(i,dd(j,k));
37                     if(z>max)
38                         max=z;
39                 }
40             }
41         }
42         cout<<max<<endl;
43     }
44 }
时间: 2024-11-10 13:01:10

first blood(15程序设计大赛)暴力搜索,剪枝是关键的相关文章

A 暴力搜索 剪枝是关键

Description 盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大.盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗? Input 首先是一个正整数T,表示有T组测试数据每组测试数据是一个正整数n(1<=n<=10^6) Output 对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行 Sample Input 297 Sam

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

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

2017&quot;百度之星&quot;程序设计大赛 - 初赛(A)

2017"百度之星"程序设计大赛 - 初赛(A) hdu6108    求出 n-1 的因子个数即可 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b;

浅谈搜索剪枝

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

“青软杯”安徽科技学院第六届程序设计大赛_专业组

Contest - "青软杯"安徽科技学院第六届程序设计大赛_专业组 Start time:  2015-04-18 08:00:00.0  End time:  2015-04-18 12:00:00.0 Current System Time:  2015-04-21 00:07:42.57  Contest Status:   Ended 关于举办"青软杯"安徽科技学院 第六届程序设计大赛通知 ACM 国际大学生程序设计竞赛 (International Co

计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法

(一)题面 计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法 搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 “0k1234567”,搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 “0k” 是标记进制为15的前缀标记,之后的部分 “1234567” 是实际的十五进制的数字串. 在发现这一标记模式后,搜狗的工程师开始尝试在已有的分词算法上进一步加入对于十五进制数字串的处理,把网页上的这种形式的 15 进制数正确地提取出来.我们知道,标记

2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆

2014年百度之星程序设计大赛 - 初赛(第二轮)

1001 暴力 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int maxn = 100100; int ll[maxn], rr[maxn]; struct node { int x, y, bj; }e[maxn]; int main() { int cas = 1; int T; scanf("%d", &T);

2014年百度之星程序设计大赛 - 资格赛 1004 -- Labyrinth

Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1453    Accepted Submission(s): 500 Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,