Submission #365428

#TimeUsernameProblemLanguageResultExecution timeMemory
365428BartolMSkyscraper (JOI16_skyscraper)C++17
20 / 100
938 ms94700 KiB
#include <bits/stdc++.h> using namespace std; #define X first #define Y second #define mp make_pair #define pb push_back typedef long long ll; typedef pair <int, int> pii; typedef pair <int, pii> pip; typedef pair <pii, int> ppi; typedef pair <ll, ll> pll; const int INF=0x3f3f3f3f; const int N=14; const int MOD=1e9+7; int n, m; int p[N]; int dp[(1<<14)+2][N][105]; int add(int a, int b) { return (a+b)%MOD; } int rek(int mask, int pr, int br) { if (br>m) return 0; if (__builtin_popcount(mask)==n) return 1; int &ret=dp[mask][pr][br]; if (ret!=-1) return ret; ret=0; for (int i=0; i<n; ++i) { if (mask & (1<<i)) continue; ret=add(ret, rek(mask | (1<<i), i, br+abs(p[i]-p[pr]))); } return ret; } void solve() { sort(p, p+n); int sol=0; do { int res=0; for (int i=1; i<n; ++i) res+=abs(p[i]-p[i-1]); sol+=res<=m; } while (next_permutation(p, p+n)); printf("%d\n", sol); } void load() { scanf("%d %d", &n, &m); for (int i=0; i<n; ++i) scanf("%d", &p[i]); } int main() { load(); assert(n<=14); if (n<=8) { solve(); return 0; } memset(dp, -1, sizeof dp); int sol=0; for (int i=0; i<n; ++i) sol=add(sol, rek((1<<i), i, 0)); printf("%d\n", sol); return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'void load()':
skyscraper.cpp:55:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   55 |     scanf("%d %d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:56:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   56 |     for (int i=0; i<n; ++i) scanf("%d", &p[i]);
      |                             ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...