跳转至

Atcoder AWC 052 beta

vp 了一下

A 循环

找到最长连续递增序列

B 循环 取余

C 01背包

饺子醋这一块,其实就是为了这题来vp的,什么时候才能学会01背包啊!

\(n\)件商品,每件满意度\(V_i\),价格\(C_i\),每件商品最多只能购买一次,一共\(S\)

是一道01背包模版题!

void solve() { 
  int n, s;
  cin >> n >> s;
  vector<int> v(n + 1), c(n + 1);
  for (int i = 1; i <= n; i ++) {
    cin >> v[i] >> c[i];
  }
  vector<int> dp(s + 1, INT_MIN / 2);
  dp[0] = 0;
  debug(dp);
  for (int i = 1; i <= n; i ++) { // 第i个商品
    int cur_v = v[i], cur_c = c[i];
    for (int j = s; j >= 0; j --) { // 能否转移到花费j元?
      if (j - cur_c >= 0) dp[j] = max(dp[j], dp[j - cur_c] + cur_v);
    }
  }
  cout << ((dp[s] > 0) ? dp[s] : -1) << endl;
}

D 二进制枚举/搜索/状压

后续补题

E 状压DP(TSP旅行商问题)

后续补题