제출 #169096

#제출 시각아이디문제언어결과실행 시간메모리
169096mohammad_kilaniAliens (IOI16_aliens)C++17
25 / 100
2052 ms126552 KiB
#include <bits/stdc++.h>
#include "aliens.h"
using namespace std;
const int N = 4010 , K = 4010;
vector< pair<int,int> > arr , tmp;
long long dp[N][K];
int n , m , k;

long long a[N] , b[N];

long long solve(int i,int cur){
	if(i == n)
		return 0;
	if(cur == k)
		return (long long)1e18;
	if(dp[i][cur] != -1)
		return dp[i][cur];
	dp[i][cur] = (long long)1e18;
	int mx = -1;
	long long val;
	for(int j = i ;j < n;j++){
		val = (long long)arr[i].first * (long long)arr[i].first;
		val += (long long)a[j] * (long long)arr[i].first + b[j];
		dp[i][cur] = min(dp[i][cur] , val + solve(j + 1, cur + 1));
	}
	return dp[i][cur];
}

long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c){
	for(int i = 0 ;i < n;i++){
		arr.push_back(make_pair(min(r[i] , c[i]) , -max(r[i] , c[i])));
	}
	sort(arr.begin(),arr.end());
	int mx = -1;
	for(int i = 0 ;i < (int)arr.size();i++){
		arr[i].second = -arr[i].second;
		if(arr[i].second > mx){
			tmp.push_back(arr[i]);
			mx = arr[i].second;
		}
	}
	arr = tmp;
	n = (int)arr.size();
	::n = n;
	::m = m;
	::k = k;
	memset(dp,-1,sizeof(dp));
	for(int i = 0 ;i < n;i++){
		b[i] = (long long)(arr[i].second + 1) * (long long)(arr[i].second + 1);
		if(i < n - 1 && arr[i].second >= arr[i + 1].first)
			b[i] -= (long long)(arr[i].second - arr[i + 1].first + 1) * (long long)(arr[i].second - arr[i + 1].first + 1);
			a[i] = -2 * (long long)(arr[i].second + 1);
	}
    return solve(0 , 0);
}

컴파일 시 표준 에러 (stderr) 메시지

aliens.cpp: In function 'long long int solve(int, int)':
aliens.cpp:19:6: warning: unused variable 'mx' [-Wunused-variable]
  int mx = -1;
      ^~
aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:50:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   if(i < n - 1 && arr[i].second >= arr[i + 1].first)
   ^~
aliens.cpp:52:4: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
    a[i] = -2 * (long long)(arr[i].second + 1);
    ^
#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...