今晚AWC
2026-02-09 19:21:15
发布于:浙江
成功AK
注意:我不是Aler,我不用AI,请不要误会

今天Atcoder有个AWC,尝试AK中,嗯,很简单,easy
666,有人2:18做完了,印度人好厉害啊
靠,给我卡了
哈哈,300,比较水
呜呜呜,T4竟然WA?给我卡到"61/69"
T5AK!就差T4了qwq
竞赛结束立刻发题解
全部评论 8
#include <iostream> #include <vector> #include <algorithm> #include <cstring> using namespace std; typedef long long ll; int main() { int N, M, K; cin >> N >> M >> K; vector<int> A(N+1), B(N+1); for (int i = 1; i <= N; i++) { cin >> A[i] >> B[i]; } // dp[j][cost]: 最后一个选择的城镇是 j,总花费为 cost 时的最大利润 // j=0 表示还没有选择任何城镇 vector<vector<ll>> dp(N+1, vector<ll>(M+1, -1)); dp[0][0] = 0; // 初始状态:没有选择任何城镇,花费0,利润0 for (int i = 1; i <= N; i++) { // 新的 dp 数组,用于滚动更新 vector<vector<ll>> new_dp = dp; for (int j = 0; j <= N; j++) { for (int cost = 0; cost <= M; cost++) { if (dp[j][cost] < 0) continue; // 无效状态 // 情况1:不选第 i 个城镇 - 已经通过 new_dp = dp 复制了 // 情况2:选择第 i 个城镇 int new_cost = cost + B[i]; if (new_cost <= M) { // 如果这是第一个选择的城镇 (j=0) if (j == 0) { new_dp[i][new_cost] = max(new_dp[i][new_cost], dp[j][cost] + A[i]); } // 如果之前有选择的城镇,检查距离约束 else if (i - j <= K) { new_dp[i][new_cost] = max(new_dp[i][new_cost], dp[j][cost] + A[i]); } } } } dp = move(new_dp); } // 查找所有可能状态中的最大利润 ll ans = 0; for (int j = 0; j <= N; j++) { for (int cost = 0; cost <= M; cost++) { ans = max(ans, dp[j][cost]); } } cout << ans << endl; return 0; }2026-02-09 来自 浙江
1阴
2026-02-09 来自 浙江
0h
2026-02-09 来自 浙江
0注:贴主 T4 代码
2026-02-09 来自 浙江
1
h
hh2026-02-10 来自 广东
0
2026-02-10 来自 浙江
0不是AI?
2026-02-10 来自 北京
0yes
2026-02-10 来自 浙江
0换马蜂了qwq
2026-02-10 来自 浙江
0他用了,但是这个比赛允许用AI
2026-02-10 来自 浙江
0
6
2026-02-10 来自 湖北
0em...
2026-02-10 来自 浙江
0
什么是Atcoder?
2026-02-09 来自 浙江
0em,一个日本的刷题网站
2026-02-09 来自 浙江
0我知道,可我用AI翻译会提示太长,所以我看不懂
2026-02-09 来自 浙江
0哦
2026-02-09 来自 浙江
0
这次比赛 A 我单手 10 s AC
2026-02-09 来自 浙江
0大佬好厉害
2026-02-09 来自 浙江
0我400分
2026-02-09 来自 浙江
0个人觉得 A 送分的
2026-02-09 来自 浙江
0
200分
2026-02-09 来自 浙江
0






































有帮助,赞一个