Submission #1305091

#TimeUsernameProblemLanguageResultExecution timeMemory
1305091lsjoPinball (JOI14_pinball)C++20
29 / 100
1095 ms8312 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int a[1005],b[1005],c[1005],d[1005]; int dp[1005][1005]; int currl[1005]; int currr[1005]; const int inf = 1e18; signed main() { for (int i = 0; i <= 1000; i++) { for (int j = 0; j <= 1000; j++) dp[i][j]=inf; } int m, n; cin >> m >> n; for (int i = 0; i < m; i++) { cin >> a[i] >> b[i] >> c[i] >> d[i]; } for (int i = m-1; i >= 0; i--) { dp[i][i]=d[i]; // find the continuous to left for each thing // and smallest continuous to right // then use curr to merge them //cout << i << "\n"; for (int j = 0; j < m; j++) { for (int k = 0; k < m; k++) { if (a[j] <= b[k] && a[j] <= a[i] && a[i] <= b[k] && b[k] <= b[i]) { // checking if they overlap correctly // checking if c[i] puts it in the thing if (a[j] <= c[i] && c[i] <= b[k]) dp[j][i] = min(dp[j][i], dp[j][k]+d[i]); } if (a[j] <= b[k] && a[i] <= a[j] && a[j] <= b[i] && b[i] <= b[k]) { if (a[j] <= c[i] && c[i] <= b[k]) dp[i][k] = min(dp[i][k], dp[j][k]+d[i]); } } } /*for (int j = 0; j < m; j++) { for (int k = 0; k < m; k++) { cout << dp[j][k] << " "; } cout << "\n"; } cout << "\n";*/ //cout << dp[i][i] << "\n"; } int minnum = inf; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if (a[i]==1 && b[j]==n) minnum=min(minnum, dp[i][j]); } } if (minnum==inf) cout << -1 << "\n"; else cout << minnum << "\n"; return 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...