日常训练2025-1-5
1.日常刷题2025-3-162.日常训练2025-1-23.日常训练2025-1-3
4.日常训练2025-1-5
5.日常训练2025-1-86.日常训练2025-1-117.日常训练2025-1-128.日常训练2025-1-139.日常训练2025-1-1410.日常训练2025-1-1511.日常训练2025-1-1612.日常训练2025-1-1713.日常训练2025-1-1814.日常训练2025-1-1915.日常训练2025-1-2116.日常训练2025-1-2217.日常刷题2025-1-2318.日常训练2025-1-2419.日常刷题2025-1-2520.日常刷题21.日常刷题2025-2-622.日常刷题2025-2-923.日常刷题2025-2-1424.日常刷题2025-2-1525.日常刷题2025-2-1726.日常刷题2025-2-2027.日常刷题2025-2-2128.日常刷题2025-2-2229.日常刷题2025-2-2430.日常刷题2025-2-2631.日常刷题2025-2-2732.日常刷题2025-2-2833.日常刷题2025-3-134.日常刷题2025-3-235.日常刷题2025-3-336.日常刷题2025-3-537.日常刷题2025-3-638.日常刷题2025-3-739.日常刷题2025-3-840.日常刷题2025-3-941.日常刷题2025-3-1042.日常刷题2023-3-1143.日常刷题2025-3-1344.非常棒的二分和DP日常训练2025-1-5
L. Bridge Renovation
rating:1400
思路(贪心)
需要思考每种板子的组合方式,最好的组合方式是两个2号板子和1个1号板子,加起来只消耗一块板子。
其次是三块1号板子加起来只消耗一块板子。
然后就是两块任意板子需要消耗一块板子。
代码
#include <bits/stdc++.h> typedef std::pair<int, int> pii; #define INF 0x3f3f3f3f #define MOD 998244353 using i64 = long long; const int N = 1e5+5; void solve(){ int n; std::cin >> n; if (n == 1){ std::cout << 2 << '\n'; return; } int ans = 0; int a = n, b = n, c = n; if (b % 2 == 0){ ans += b / 2; a -= b / 2; b = 0; }else{ ans += b / 2; a -= b / 2; b = 1; if (a >= 2){ ans += 1; a -= 2; b = 0; } } if (a != 0){ if (a % 3 == 1){ ans += a / 3; ans += 1; c -= 1; a = 0; }else if (a % 3 == 2){ ans += a / 3; ans += 1; a = 0; }else if (a % 3 == 0){ ans += a / 3; a = 0; } } ans += c / 2; ans += c % 2 == 0 ? 0 : 1; std::cout << ans << '\n'; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2); int t = 1, i; for (i = 0; i < t; i++){ solve(); } return 0; }
E. Three Strings
rating:1500
https://codeforces.com/contest/2050/problem/E
思路
注意到本题是求最小化问题,其次就是数据范围并不大,所以可以往DP方面想,恰好本题就是DP
状态定义:
:表示 a 用了 1 ~ i 个字符,b 用了 1 ~ j 个字符,得到的最小替换数 状态转移:
评述
做的时候其实想到DP了,但是不是特别坚定,总感觉还有其他解法,结果状态定义没想出来。
代码
#include <bits/stdc++.h> typedef std::pair<int, int> pii; #define INF 0x3f3f3f3f #define MOD 998244353 using i64 = long long; const int N = 1e5+5; void solve(){ std::string a, b, c; std::cin >> a >> b >> c; a = ' ' + a, b = ' ' + b, c = ' ' + c; std::vector<std::vector<int>> dp(a.size(), std::vector<int>(b.size(), INF)); dp[0][0] = 0; for (int i = 0; i < a.size(); i++){ for (int j = 0; j < b.size(); j++){ if (i+1 < a.size()) dp[i+1][j] = std::min(dp[i+1][j], dp[i][j] + (a[i+1] != c[i+1+j])); if (j+1 < b.size()) dp[i][j+1] = std::min(dp[i][j+1], dp[i][j] + (b[j+1] != c[i+1+j])); } } std::cout << dp[a.size() - 1][b.size() - 1] << '\n'; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2); int t = 1, i; std::cin >> t; for (i = 0; i < t; i++){ solve(); } return 0; }
本文作者:califeee
本文链接:https://www.cnblogs.com/califeee/p/18653285
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步