news 2026/6/23 1:55:47

宏观模拟|dp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
宏观模拟|dp

17.06

二出现的次数-数位dp

把数字转成字符串,用记忆化搜索逐位枚举可能的数字,统计每一位选2时的累计次数,最后返回总次数

class Solution {
public:
int numberOf2sInRange(int n)

{
auto s = to_string(n);
int m = s.length(), dp[m][m];
memset(dp, -1, sizeof(dp));


function<int(int, int, bool)> f = [&](int i, int cnt2, bool is_limit) -> int

{
if (i == m) return cnt2;
if (!is_limit && dp[i][cnt2] >= 0) return dp[i][cnt2];
int res = 0;
for (int d = 0, up = is_limit ? s[i] - '0' : 9; d <= up; ++d) // 枚举要填入的数字 d
res += f(i + 1, cnt2 + (d == 2), is_limit && d == up);
if (!is_limit) dp[i][cnt2] = res;
return res;
};


return f(0, 0, true);
}
};

lcr97

dp[i][j]记s前j个字符凑t前i个字符的子序列数,空t对应1种

字符相等时累加前一匹配数,不等则继承左值,最终得总数量。

class Solution {

//dp:无后效性的记忆化
typedef unsigned long long ull;
public:
int numDistinct(string s, string t)
{
int m = t.size(), n = s.size();
vector<vector<ull>> dp(m + 1, vector<ull>(n + 1, 0));
//t s

// init:当 t 为空时,s 的任何位置都包含 1 个子序列(空序列)
for (int j = 0; j <= n; j++)
dp[0][j] = 1;

s = " " + s; // 调整下标从 1 开始
t = " " + t;

for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
dp[i][j] = dp[i][j - 1]; // 默认继承左侧的值(不取 s[j])
if (s[j] == t[i])
dp[i][j] += dp[i - 1][j - 1]; // 若字符相等,加上取 s[j] 的情况
}
}
return dp[m][n];
}
};

lc2731

碰撞后“交换方向”等价于“机器人穿过对方、身份互换”

机器人可视为无差别,只需计算所有两两对的距离

class Solution {
const int mod = 1e9 + 7;
typedef long long ll;
public:
int sumDistance(vector<int>& nums, string s, int d) {
int n = nums.size();
vector<ll> pos(n);
for (int i = 0; i < n; i++) {
pos[i] = nums[i] + (s[i] == 'R' ? (ll)d : -(ll)d);
}
sort(pos.begin(), pos.end());


ll ret = 0;
ll pre_sum = pos[0] % mod;
for (int i = 1; i < n; i++) {
ll current = ( (ll)i * (pos[i] % mod) ) % mod;
ret = (ret + current - pre_sum+ mod) % mod; // +mod避免负数
pre_sum = (pre_sum + pos[i] % mod) % mod;
}
return ret;
}
};

wa 注意是所有bot dist

class Solution {

const int mod=1e9+7;

public:

int sumDistance(vector<int>& nums, string s, int d)

{

int n=nums.size();

for(int i=0;i<n;i++)

{

int t=d;

if(s[i]=='L') t=-t;

nums[i]+=t;

}

sort(nums.begin(),nums.end());

int ret=0;

for(int i=1;i<n;i++)

{

ret+=abs(nums[i]-nums[i-1]);

}

return ret;

}

};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 15:02:37

【深基16.例3】二叉树深度(洛谷P4913)

题目描述有一个 n(n≤10^6) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过 n&#xff09;&#xff0c;建立一棵二叉树&#xff08;根节点的编号为 1&#xff09;&#xff0c;如果是叶子结点&#xff0c;则输入 0 0。建好这棵二叉树之后&#xff0c;请求出…

作者头像 李华
网站建设 2026/6/20 19:54:14

easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人

1.获取联系人列表效果展示:思路:联系人不至于用户,还有群聊,所以传参思路很明确了不仅需要当前用户id,还需要查询类型(即我的好友为用户 我的群聊是群组) controller层:RequestMapping("/loadContact") GlobalInterceptor public ResponseVO loadContact(HttpServlet…

作者头像 李华
网站建设 2026/6/23 17:03:43

AI核心知识45——大语言模型之PPO(简洁且通俗易懂版)

PPO 是 Proximal Policy Optimization&#xff08;近端策略优化&#xff09;的缩写。它是大语言模型在 RLHF&#xff08;基于人类反馈的强化学习&#xff09; 阶段中&#xff0c;用来具体执行“参数修改”的核心算法。如果说 RLHF 是一个宏大的“教学方针”&#xff08;用奖励来…

作者头像 李华
网站建设 2026/6/23 5:31:37

AI核心知识46——大语言模型之DPO(简洁且通俗易懂版)

DPO 是 Direct Preference Optimization&#xff08;直接偏好优化&#xff09;的缩写。它是目前 AI 训练领域最火、最革命性的技术之一。简单来说&#xff0c;它是为了取代&#xff08;或者说简化&#xff09; RLHF&#xff08;特别是其中的 PPO 阶段&#xff09; 而诞生的。如…

作者头像 李华
网站建设 2026/6/22 3:53:14

原子变量:并发编程的无锁利器-deepseek

原子变量是一种在并发编程中用于实现线程安全、无锁&#xff08;lock-free&#xff09; 操作的特殊变量类型。它的核心特性是对它的单个读、写或修改操作是不可分割的&#xff08;即原子的&#xff09;&#xff0c;从而在多线程环境中无需使用传统的互斥锁&#xff08;如 synch…

作者头像 李华
网站建设 2026/6/22 20:33:25

Logseq插件开发终极指南:从零到上架完整教程

Logseq插件开发终极指南&#xff1a;从零到上架完整教程 【免费下载链接】logseq A privacy-first, open-source platform for knowledge management and collaboration. Download link: http://github.com/logseq/logseq/releases. roadmap: http://trello.com/b/8txSM12G/roa…

作者头像 李华