제출 #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...