Submission #425295

#TimeUsernameProblemLanguageResultExecution timeMemory
425295peijar비스킷 담기 (IOI20_biscuits)C++17
33 / 100
1164 ms1709360 KiB
#include <bits/stdc++.h> #define int long long using namespace std; #include "biscuits.h" // dp[cur][nbNecessaire] = nb de facons de choisir y si il faut nbNecessaire et // qu'on autorise que ceux avec des bits <= cur // // dp[cur][nbNecessaire] = dp[cur-1][2 * (max(0, nbNecessaire - a[cur]))] // + dp[cur-1][2 * (max(0, x + nbNecessaire - a[cur]))] // dp[-1][0] = 1 // // // dp2[cur][nbSupplements] = dp2[cur+1][ (nbSupplements + a[cur]) / 2] // + dp2[cur+1][(nbSupplements + a[cur] - x) / 2] // // dp2[256][nbSupplements] = 1 // // // Si a[i] > x on peut ajouter (a[i] - x) / 2 à a[i+1] // Donc a[i] <= x pour tout i int count_tastiness(int x, vector<int> a) { const int MAX = 256; array<vector<int>, MAX> arr; arr.fill(vector<int>(x + 2, 0)); for (int i(0); i < (int)a.size(); ++i) { if (a[i] > x) { if (i + 1 == (int)a.size()) a.push_back(0); a[i + 1] += (a[i] - x) / 2; a[i] -= 2 * ((a[i] - x) / 2); } assert(a[i] <= x + 1); } for (int nbRestants = 0; nbRestants <= x + 1; ++nbRestants) arr[MAX - 1][nbRestants] = 1; for (int i(MAX - 2); i >= 0; --i) { for (int nbRestants = 0; nbRestants <= x + 1; ++nbRestants) { int tot = nbRestants; if (i < (int)a.size()) tot += a[i]; if (tot >= x) arr[i][nbRestants] += arr[i + 1][(tot - x) / 2]; arr[i][nbRestants] += arr[i + 1][tot / 2]; } } return arr[0][0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...