XV Open Cup named after E.V. Pankratiev Stage 6, Grand Prix of Japan Problem J. Hyperrectangle
Posted vb4896
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XV Open Cup named after E.V. Pankratiev Stage 6, Grand Prix of Japan Problem J. Hyperrectangle相关的知识,希望对你有一定的参考价值。
题目大意:
给出一个$d$维矩形,第i维的范围是$[0, l_i]$. 求满足$x_1 + x_2 + ...x_d leq s$ 的点构成的单纯形体积。
$d, l_i leq 300$
题解:
给出了求$a_1x_1 + a_2x_2 + ...a_dx_d leq b $的通用做法。答案就是一个神奇的式子$frac{1}{n!} * sum_{I subseteq S}{(-1)^{|I|}}*max{0, b - sum_{i in I}{a_il_i}}^d$
背包一下分别求出取了奇数个和偶数个$l_i$的和的方案数即可。
代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define N 310 5 typedef long long LL; 6 const int mod = 1e9 + 7; 7 const double EPS = 1e-12; 8 9 10 int a[N]; 11 int f[2][N * N], g[2][N * N]; 12 13 int pow_mod(int x, int p) 14 { 15 int res = 1; 16 for (; p; p >>= 1) 17 { 18 if (p & 1) res = 1LL * res * x % mod; 19 x = 1LL * x * x % mod; 20 } 21 return res; 22 } 23 24 int main() 25 { 26 //freopen("in.txt", "r", stdin); 27 28 int n, s; 29 cin >> n; 30 for (int i = 1; i <= n; ++i) 31 cin >> a[i]; 32 cin >> s; 33 34 int o = 0; 35 f[0][0] = 1; 36 for (int i = 1; i <= n; ++i) 37 { 38 o ^= 1; 39 memcpy(g[o], g[o ^ 1], sizeof(g[o])); 40 memcpy(f[o], f[o ^ 1], sizeof(f[o])); 41 for (int j = s; j >= a[i]; --j) 42 { 43 f[o][j] += g[o ^ 1][j - a[i]]; 44 if (f[o][j] >= mod) f[o][j] -= mod; 45 46 g[o][j] += f[o ^ 1][j - a[i]]; 47 if (g[o][j] >= mod) g[o][j] -= mod; 48 } 49 } 50 51 int ans = 0; 52 for (int i = 0; i <= s; ++i) 53 { 54 ans += 1LL * pow_mod(s - i, n) * f[o][i] % mod; 55 ans -= 1LL * pow_mod(s - i, n) * g[o][i] % mod; 56 if (ans >= mod) ans -= mod; 57 if (ans < 0) ans += mod; 58 } 59 printf("%d ", ans); 60 return 0; 61 }
以上是关于XV Open Cup named after E.V. Pankratiev Stage 6, Grand Prix of Japan Problem J. Hyperrectangle的主要内容,如果未能解决你的问题,请参考以下文章
XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
XVIII Open Cup named after E.V. Pankratiev. GP of SPb
XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg.
XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
XVII Open Cup named after E.V. Pankratiev. Eastern Grand Prix. Problem F. Buddy Numbers 贪心数论构造
XVII Open Cup named after E.V. Pankratiev Grand Prix of Moscow Workshops, Sunday, April 23, 2017 Pro