답안 #994138

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
994138 2024-06-07T07:14:45 Z vjudge1 Kas (COCI17_kas) C++17
100 / 100
68 ms 1984 KB
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll SM = 1e5+1, inf = 1e10;
ll dp[2][SM];

int main()
{
  ll n;
  cin >> n;
  ll a[1 + n];
  ll x = 0;
  for(int i = 1; i <= n;  ++i)
    {
      cin >> a[i];
      x += a[i];
    }

  for(int j = 1; j <= x; j++)
    dp[0][j] = -inf;
  
  for(int i = 1; i <= n; i ++)
    {
      bool b = i & 1, nb = !b;

      for(int j = 0; j <= x; j++)
	{
	  dp[b][j] = dp[nb][j];
	  if(j >= a[i])
	    dp[b][j] = max(dp[b][j], dp[nb][j - a[i]]);
	  else
	    dp[b][j] = max(dp[b][j], dp[nb][a[i] - j] + a[i] - j);

	  if(a[i] + j <= x)
	    dp[b][j] = max(dp[b][j], dp[nb][j + a[i]] + a[i]);

	}
    }

  int mx = max(0ll, dp[n & 1][0]);
  cout << mx + (x - 2 * mx) << endl;
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 1884 KB Output is correct
2 Correct 34 ms 1884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 1884 KB Output is correct
2 Correct 54 ms 1984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 1880 KB Output is correct
2 Correct 68 ms 1880 KB Output is correct