首页 > 代码库 > BZOJ1224 [HNOI2002]彩票
BZOJ1224 [HNOI2002]彩票
首先发现暴搜是2^50级别,明显T了
我们搜索的时候,剪枝一下。
如果当前最大最小值都不满足满足题意的话就不搜了,我们可以用前缀和维护这个东西
于是就6s卡过
1 /************************************************************** 2 Problem: 1224 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:6800 ms 7 Memory:804 kb 8 ****************************************************************/ 9 10 #include <cstdio>11 #include <cmath>12 13 using namespace std;14 typedef double lf;15 const lf eps = (lf) 1e-10;16 const int N = 60;17 18 int n, m, ans;19 lf x, y, T;20 lf s[N];21 22 void dfs(int pos, int cnt, lf now) {23 lf Max = now + s[pos + (n - cnt) - 1] - s[pos - 1],24 Min = now + s[m] - s[m - (n - cnt)];25 if (Min - T > eps || Max - T < -eps) return;26 if (cnt == n) {27 ++ans;28 return;29 }30 if (pos == m + 1) return;31 dfs(pos + 1, cnt, now);32 dfs(pos + 1, cnt + 1, now + (lf) 1 / pos);33 }34 35 int main() {36 int i;37 scanf("%d%d%lf%lf", &n, &m, &x, &y);38 T = (lf) x / y;39 for (i = 1; i <= m; ++i)40 s[i] = s[i - 1] + (lf) 1 / i;41 dfs(1, 0, 0);42 printf("%d\n", ans);43 return 0;44 }
(p.s. 论c++的坑爹之处:浮点数运算)
BZOJ1224 [HNOI2002]彩票
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。