제출 #569963

#제출 시각아이디문제언어결과실행 시간메모리
569963josanneo22도로 폐쇄 (APIO21_roads)C++17
12 / 100
49 ms4172 KiB
#include<bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<stdlib.h>
 
using namespace std;
 
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pair<int, int> > vpii;
typedef pair<ll,ll> pll;
typedef vector<ll> vll;
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define F0R(i,a) FOR(i,0,a)
#define ROF(i,a,b) for (int i = (b); i >= (a); --i)
#define R0F(i,a) ROF(i,0,a)
#define trav(a,x) for (auto& a: x)
 
#define mp make_pair
#define pb push_back
#define rsz resize
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
#define f first
#define s second
#define out(x) cout<<x<<'\n';
#define in(x) cin>>x;
#define inarr(a,x,y) for(int i=x;i<y;i++){cin>>a[i];}
#define incor(a,x,y) for(int i=x;i<y;i++){cin>>a[i].f>>a[i].s;}
int dx[4] = { -1, 0, 1, 0 };
int dy[4] = { 0, 1, 0, -1 };
const int mod = 1e9 + 7;
vll minimum_closure_costs(int n, vi u, vi v, vi w)
{
	bool s1 = true;
	FOR(i,0,n-1)
	if(u[i] != 0)
	  s1 = false;
	if(s1)
	{
		ll ans = 0;
		vll val;
		sort(all(w));
		val.pb(0);
		FOR(i,0,n-1)
		{
			ans += w[i];
			val.pb(ans);
		}
		reverse(all(val));
		return val;
	}
	vll ans(n);
	FOR(i,0,n-1)
		ans[0] += w[i];
	vll dp(n - 1);
	FOR(i,0,n-1)
	{
		
		dp[i] = min((i == 0 ? 0 : dp[i - 1]) + w[i], (i - 2 < 0 ? 0 : dp[i - 2]) + (i - 1 < 0 ? 0 : w[i - 1]));//dp[i-1]+w[i] or dp[i-2]+w[i-1]
	}
	ans[1] = dp.back();
	return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...