Subtask.1(8%)

保證 \(\forall x_i×x_{i+1} \leq 0 \land 2 \leq N \leq 1000\)

  • 正負數交錯,正數旁邊絕對是 0 或負數
  • 那你把全部正數加起來就過了啊
void solve (){ 
  int N; cin >> N; 
  vector <ll> vec(N); 
  for (auto &to:vec) cin >> to; 
  ll sum = 0; 
  for (auto to:vec) if (to > 0) sum += to; 
  cout << sum << '\n'; 
} 

Subtask.2(7%)

保證 \(1 \leq N \leq 10\)

  • 純粹的暴力枚舉,其實這比 AC 解難寫一點
int N; 
vector <ll> vec; 
ll f (int index, ll tmp, bool last){ 
  if (index == 0){ 
    return max(f(index+1, 0, 0), f(index+1, vec[index], 1)); 
  } 
  if (index == N-1){ // to the end 
    return (last) ? (tmp) : max(tmp, tmp+vec[index]); 
  } 
  return (last) ? (f(index+1, tmp, 0)) : 
                  max(f(index+1, tmp+vec[index], 1), f(index+1, tmp, 0)); 
} 
  
void solve (){ 
  cin >> N; 
  vec.resize(N); 
  for (auto &to:vec) cin >> to; 
  cout << f(0, 0, 0) << '\n'; 
} 

Subtask.3、4(26%;59%)

  • 我們定義 DP[i]:考慮到 vec[i] 時,最大能取的總和
  • 如果我們不取 vec[i],表示我們能取 vec[i-1] 與 vec[i+1]

我都已經明示你是 DP,而且不用考慮 vec[i+1] 了

Subtask.3、4(26%;59%)

  • 轉移式:DP[i] = max( DP[i-2] + vec[i], DP[i-1] )

你在做後面的項目時,他自然會考慮到 vec[i]

所以其實你轉移式只需要在意左邊

不需要重複考慮右邊的東西

  • 然後呢?然後就沒有了,認真
  • 最高分:2000 / 2000
  • 建電最高排名:1
  • 北資最高排名:7
  • 標準差:285.784
  • 平均分數:479.305 / 2000
  • 錄取線:我怎麼可能告訴你

2023 Academic

  • 最高分:1200 / 1200
  • 建電最高排名:1
  • 北資最高排名:6
  • 標準差:157.448
  • 平均分數:286.800 / 1200
  • 錄取線:我們幹部是擲筊的

2022 Academic

2023 Acedamic

比賽時長:168 小時

題目數:5 + 10 + 5 = 20

Problems per day:2.857

Tatal submissions:1489

Submissions per day:212.714

第一名翻盤次數:15

2022 Acedamic

比賽時長:72 小時

題目數:2 + 5 + 5 = 12

Problems per day:4

Tatal submissions:729

Submissions per day:243

第一名翻盤次數:0

建電()排行榜

  • 謝侑宸 / 807
  • 蔡嘉晉 / 小蔡
  • 賴柏宇 / 海之音
  • 楊孟軒 / 水獺
  • 莊正昌 / MR

北資排行榜

  • 王小鏡 / 小鏡
  • 吳湘媛 / elephie
  • 賴香伊 / OuOb
  • 林妤娟 / 娟
  • 吳沁恩 / 小卡

Minimal

By iCisC_ doppelgänger of Repkironca