Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 34;
- int A[N], dp[2][N][N][101][101];
- int main () {
- int n, k, total = 0;
- cin >> n >> k;
- for (int i = 0; i < n; i++) {
- cin >> A[i];
- total += A[i];
- }
- dp[0][0][0][0][0] = true;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j <= i; j++) {
- for (int z = 0; z <= i; z++) {
- for (int l = 0; l <= 100; l++) {
- for (int m = 0; m <= 100; m++) {
- dp[(i + 1) & 1][j + 1][z][l + A[i]][m] |= dp[i & 1][j][z][l][m];
- dp[(i + 1) & 1][j][z + 1][l][m + A[i]] |= dp[i & 1][j][z][l][m];
- dp[(i + 1) & 1][j][z][l][m] |= dp[i & 1][j][z][l][m];
- }
- }
- }
- }
- }
- int num = 0, den = 1;
- int diffNum = k, diffDen = 1;
- for (int i = 1; i < n; i++) {
- for (int j = 1; j < n; j++) {
- int z = n - i - j;
- if (z <= 0)
- continue;
- for (int c1 = 1; c1 < 100; c1++) {
- for (int c2 = 1; c2 < 100; c2++) {
- int c3 = total - c1 - c2;
- if (!dp[n & 1][i][j][c1][c2])
- continue;
- int tmpNum = j * z * c1 + i * z * c2 + i * j * c3;
- int tmpDen = 3 * i * j * z;
- int tmp = abs (tmpNum - k * i * j * z * 3);
- if (tmp * diffDen < tmpDen * diffNum) {
- diffNum = tmp, diffDen = tmpDen;
- num = tmpNum, den = tmpDen;
- } else if (tmp * diffDen == tmpDen * diffNum && tmpNum < 3 * k * i * j * z) {
- diffNum = tmp, diffDen = tmpDen;
- num = tmpNum, den = tmpDen;
- }
- }
- }
- }
- }
- int g = __gcd (num, den);
- cout << num / g << '/' << den / g << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement