uvaoj 10717 Mint 暴力枚举所有情况
来源:互联网 发布:vim node inspector 编辑:程序博客网 时间:2024/06/05 03:45
uvaoj 10717 Mint 暴力枚举所有情况
要建造桌子,每个桌子必须由四种不同类型的腿组成,每种腿的高度给出,可以叠加,现在给定一些类型的材料的高度和一个期望的桌子的高度,看看不超过这个高度的最大高度是多少,大于这个高度的最小高度是多少。
我们任选四个类型的材料,因为四个腿是一样的,所以,这四个材料组成的可能高度是这四个数的最小公倍数的倍数。数据量比较小,直接暴力枚举。这就差不多涉及到了枚举集合,可以使用类似产生排列的dfs写法,枚举写的时候,可以减少一层,我当时写的时候是多写了一层,就超时了。
代码如下:
/*************************************************************************> File Name: 10717.cpp> Author: gwq> Mail: gwq5210@qq.com > Created Time: 2015年01月06日 星期二 23时04分15秒 ************************************************************************/#include <cmath>#include <ctime>#include <cctype>#include <climits>#include <cstdio>#include <cstdlib>#include <cstring>#include <map>#include <set>#include <queue>#include <stack>#include <string>#include <vector>#include <sstream>#include <iostream>#include <algorithm>#define INF (INT_MAX / 10)#define clr(arr, val) memset(arr, val, sizeof(arr))#define pb push_back#define sz(a) ((int)(a).size())using namespace std;typedef set<int> si;typedef vector<int> vi;typedef map<int, int> mii;typedef long long ll;const double esp = 1e-5;#define N 55int num[N], val, lowwer, higher, x[4], n, t;int gcd(int a, int b){return b == 0 ? a : gcd(b, a % b);}int lcm(int a, int b){return a / gcd(a, b) * b;}void solve(void){int p = x[0];for (int i = 0; i < 4; ++i) {p = lcm(p, x[i]);}int k = 0;while (p * (k + 1) < val) {++k;}int l, h;if (p * (k + 1) == val) {l = h = val;} else {l = p * k;h = p * (k + 1);}if (l > lowwer) {lowwer = l;}if (h < higher) {higher = h;}}// dfs从位置pos枚举剩下的元素,相当于从n个数中选出m个来void dfs(int pos, int cnt){if (cnt == 4) {solve();return;}for (int i = pos + 1; i <= n - 4 + cnt; ++i) {x[cnt] = num[i];dfs(i, cnt + 1);}}int main(int argc, char *argv[]){while (scanf("%d%d", &n, &t) != EOF) {if (n == 0 && t == 0) {break;}for (int i = 0; i < n; ++i) {scanf("%d", &num[i]);}for (int i = 0; i < t; ++i) {scanf("%d", &val);lowwer = -INF;higher = INF;for (int j = 0; j <= n - 4; ++j) {// 将第一层写在外边就过,写在里边就超时,写在里边增加了一层递归x[0] = num[j];dfs(j, 1);}printf("%d %d\n", lowwer, higher);}}return 0;}
参考:
1)http://blog.csdn.net/chuan6099/article/details/9397933
0 0
- uvaoj 10717 Mint 暴力枚举所有情况
- bzoj 1024: [SCOI2009]生日快乐(暴力dfs枚举所有情况)
- POJ2926-Requirements,曼哈顿距离。去掉绝对值符号暴力枚举所有情况,神薙!
- UVA327暴力讨论所有情况
- (方法)枚举2^k所有情况
- hdu5365 暴力枚举所有点是否能够成正四边形
- 暴力枚举
- 暴力枚举?
- 暴力枚举
- 暴力枚举
- 暴力枚举
- UVa 10717 Mint (DFS枚举4个数的lcm)
- UVa 10717 - Mint (枚举状态求LCM更新结果)
- hdoj 5461 Largest Point 【枚举所有情况 找最大值】
- 10717 - Mint
- 10717 - Mint
- Mint-10717
- HDOJ 1079 && POJ 1082 Calendar Game (博弈: 暴力枚举所有状态的P\N)
- Objective-C中copy 、retain以及ARC中新加入的strong、weak关键字的含义
- JavaScrpt 全局属性与函数
- Cocos2d-html5 搭建开发环境,运行 Hello World,JetBrains IDE Support
- 视频编辑软件‘编辑星V3’中英版本上线了
- 龙虎鲸------------编程原理之三大经书
- uvaoj 10717 Mint 暴力枚举所有情况
- 怪物仇恨范围,自动攻击,血条
- spring对Junit的支持、spring对Aop的支持
- [leetcode 39] Combination Sum
- 软件测试的目标
- 冒泡排序
- Fragment与Activity之间的通讯(解决Android中Fragment调用startactivityforresult不能返)
- public protect 跟private
- 希尔排序