T1: Conjugation
给定长为 的广义单调减小序列
如图所示,从顶部开始的第 行有 个正方形。
对于 ,求从左起第 列有多少个方格。
限制:
算法分析
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; int main() { int n; cin >> n; vector<int> a(n); rep(i, n) cin >> a[i]; reverse(a.begin(), a.end()); for (int i = 1; i <= a.back(); ++i) { cout << a.end() - lower_bound(a.begin(), a.end(), i) << ' '; } return 0; }
T2:Shio Ramen
太郎是个挑剔的吃货,而二郎是个贪吃鬼。
二郎的桌子上有 碗盐味拉面。给这些盐味拉面分别编号为 。
对于每个 ,第 碗盐味拉面的咸度为 ,口味浓度为 。二郎和太郎一样,喜欢吃盐味拉面,二郎希望吃的盐味拉面味道越浓越好。
二郎很大胆,并不在乎他的盐拉面中的盐味有多浓。
但是,如果二郎吃的总盐味超过 I
就会生病。
作为二郎的朋友,你可以告诉他吃哪些盐味拉面不会生病,并让总的味道浓度达到最大。
限制:
算法分析
01背包
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; inline void chmax(int& x, int y) { if (x < y) x = y; } int main() { int n, I; cin >> n >> I; vector<int> s(n), a(n); rep(i, n) cin >> s[i] >> a[i]; vector<int> dp(I+1); rep(i, n) { for (int j = I-s[i]; j >= 0; --j) { chmax(dp[j+s[i]], dp[j]+a[i]); } } cout << dp[I] << '\n'; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现