T1:复合逻辑表达式
本题难度中等,线性 问题。根据最后一个运算递推:如果是 AND
,需要两边都是 true
;如果是 OR
,只需任意一个是 true
当 S[i] = 'AND'
y[i-1]=T 且 x[i]=T
: y[i] = T
y[i-1]=T 且 x[i]=F
: y[i] = F
y[i-1]=F 且 x[i]=T
: y[i] = F
y[i-1]=F 且 x[i]=F
: y[i] = F
y[i]=T
的方案数等于 y[i-1]=T
的方案数
y[i]=F
的方案数等于 y[i-1]=F
的方案数 y[i-1]=T
的方案数等于 y[i-1]=T
的方案数
令 dp[i][0]
表示 y[i]=F
的方案数,dp[i][1]
表示 y[i]=T
的方案数
转移方程:
当 s[i]='AND'
时:
当 s[i]='OR'
时:
y[i-1]=F 或 x[i]=F
: y[i] = F
y[i-1]=T 或 x[i]=F
: y[i] = T
y[i-1]=F 或 x[i]=T
: y[i] = T
y[i-1]=T 或 x[i]=T
: y[i] = T
答案是
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; ll dp[65][2]; int main() { int n; cin >> n; vector<string> s(n); rep(i, n) cin >> s[i]; dp[0][0] = dp[0][1] = 1; rep(i, n) { if (s[i] == "AND") { dp[i+1][0] = dp[i][0]*2 + dp[i][1]; dp[i+1][1] = dp[i][1]; } else { dp[i+1][0] = dp[i][0]; dp[i+1][1] = dp[i][1]*2 + dp[i][0]; } } cout << dp[n][1] << '\n'; return 0; }
T2:反转字符串排序
本题难度中等,也是线性dp问题,需要加 维记录结尾单词有没有反转。
状态表示:
dp[i][0]
表示第 个字符串不反转,令 有序的最小代价
dp[i][1]
表示第 个字符串反转,令 有序的最小代价
初始化:
转移方程:
如果 不转 不转:
如果 转 不转:
如果 不转 转:
如果 转 转:
最后的答案是
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; inline void chmin(ll& x, ll y) { if (x > y) x = y; } int main() { int n; cin >> n; vector<int> c(n); rep(i, n) cin >> c[i]; vector<string> s(n); rep(i, n) cin >> s[i]; vector<string> r = s; rep(i, n) { reverse(r[i].begin(), r[i].end()); } const ll INF = 1e18; vector<vector<ll>> dp(n+1, vector<ll>(2, INF)); dp[0][0] = 0; dp[0][1] = c[0]; for (int i = 1; i < n; ++i) { if (s[i-1] <= s[i]) chmin(dp[i][0], dp[i-1][0]); if (r[i-1] <= s[i]) chmin(dp[i][0], dp[i-1][1]); if (s[i-1] <= r[i]) chmin(dp[i][1], dp[i-1][0]+c[i]); if (r[i-1] <= r[i]) chmin(dp[i][1], dp[i-1][1]+c[i]); } ll ans = min(dp[n-1][0], dp[n-1][1]); if (ans == INF) ans = -1; cout << ans << '\n'; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现