제출 #18745

#제출 시각아이디문제언어결과실행 시간메모리
18745gs14004도장 모으기 (JOI14_stamps)C++14
85 / 100
43 ms1804 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <limits.h> #include <stack> #include <queue> #include <map> #include <set> #include <algorithm> #include <string> #include <functional> #include <vector> #include <numeric> #include <deque> #include <utility> #include <bitset> #include <iostream> using namespace std; typedef long long lint; typedef long double llf; typedef pair<int, int> pi; int n, t, u[3005], v[3005], d[3005], f[3005]; int cst[3005], pfx[3005]; int cost(int s, int e){ int ret = (e - s) * 3 * t + u[e] + f[e]; if(s < e) ret += cst[e-1] - cst[s]; int tmp = pfx[s] + 2 * s * t; if(s != e) tmp += min(u[s] + v[s], d[s] + f[s]); tmp = min(tmp, d[s] + v[s]); return ret + tmp; } int dp[3005]; int main(){ cin >> n >> t; pfx[0] = 1e9; for(int i=1; i<=n; i++){ cin >> u[i] >> v[i] >> d[i] >> f[i]; cst[i] = cst[i-1] + min(u[i] + v[i], d[i] + f[i]); pfx[i] = min(pfx[i-1], d[i] + v[i] - 2 * i * t); } for(int i=1; i<=n; i++){ dp[i] = dp[i-1] + u[i] + v[i] + t; for(int j=0; j<i; j++){ dp[i] = min(dp[i], dp[j] + t + cost(j+1, i)); } } cout << dp[n] + t; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...