Submission #239602

#TimeUsernameProblemLanguageResultExecution timeMemory
239602NightlightSkyscraper (JOI16_skyscraper)C++14
100 / 100
230 ms240248 KiB
#include <bits/stdc++.h> #define MOD 1000000007 using namespace std; int N, L; int A[105]; int diff[105]; long long memo[101][101][1001][3]; long long dp(int n, int cc, int sum, int k) { if(sum > L) return 0; if(n > N) return cc == 1 && k == 2; if(memo[n][cc][sum][k] != -1) return memo[n][cc][sum][k]; long long res = 0, nxt = sum + (cc * 2 - k) * diff[n]; //ga nempel :D res += dp(n + 1, cc + 1, nxt, k) * (cc + 1 - k); //nempel 1 if(cc > 0) res += dp(n + 1, cc, nxt, k) * (cc * 2 - k); //gabung if(cc > 1) res += dp(n + 1, cc - 1, nxt, k) * (cc - 1); if(k < 2) { //di ujung tapi ga gabung res += dp(n + 1, cc + 1, nxt, k + 1) * (2 - k); //di ujung nempel if(cc > 0) res += dp(n + 1, cc, nxt, k + 1) * (2 - k); } return memo[n][cc][sum][k] = res % MOD; } int main() { memset(memo, -1, sizeof(memo)); scanf("%d %d", &N, &L); if(N == 1) { puts("1"); return 0; } for(int i = 1; i <= N; i++) { scanf("%d", &A[i]); } sort(A + 1, A + N + 1); diff[1] = 0; for(int i = 2; i <= N; i++) { diff[i] = A[i] - A[i - 1]; } cout << dp(1, 0, 0, 0) << "\n"; cin >> N; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:36:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &N, &L);
   ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:42:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &A[i]);
     ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...