当前位置: 首页 > news >正文

宏观模拟|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;

}

};

http://www.cnnetsun.cn/news/1206.html

相关文章:

  • 【深基16.例3】二叉树深度(洛谷P4913)
  • easychat项目复盘---获取联系人列表,联系人详细,删除拉黑联系人
  • AI核心知识45——大语言模型之PPO(简洁且通俗易懂版)
  • AI核心知识46——大语言模型之DPO(简洁且通俗易懂版)
  • 原子变量:并发编程的无锁利器-deepseek
  • Logseq插件开发终极指南:从零到上架完整教程
  • Annotators项目完整部署指南:从环境配置到生产优化
  • 强力解锁:5个remark插件如何彻底改变你的Markdown工作流
  • ISO20000新版标准终极指南:深度解析与服务管理实践
  • 终极解决方案:如何恢复经典数学公式编辑功能
  • Java开发者必备:JDK 1.8中文API文档终极指南
  • 视频防抖终极指南:从手抖菜鸟到专业级拍摄高手
  • 揭秘编程语言新宠:Gleam如何用类型安全重构你的开发体验
  • 微服务容错监控实战:Resilience4j与Spring Boot Admin深度集成方案
  • OpenResume简历构建器完全指南:从零到精通的职业利器
  • 3分钟极速部署:打造专业级Emacs开发环境的终极方案
  • OpenTelemetry eBPF Profiler与OTel Collector集成:企业级性能监控的智能解决方案
  • Cracking the Coding Interview 第6版:程序员面试必备宝典完整指南
  • Layer弹层组件完整指南:快速掌握现代化Web弹层开发
  • 零基础玩转Protogen x3.4:AI绘画从入门到精通终极指南
  • 智能视频字幕生成技术深度解析:从原理到实战
  • 从SQL束缚中解放:ent4/ent如何重构你的Go数据层开发体验
  • Awesome Prompts 完整使用指南:解锁GPT无限潜能
  • MacDriver终极指南:如何用Go语言轻松开发macOS原生应用
  • PingFangSC字体包:跨平台Web字体性能优化完整解决方案
  • 系统设计必读:10本经典技术书籍深度解析与实战指南
  • 3分钟上手Diaspora:2024年最值得收藏的WordPress主题指南
  • Devtron:终极Electron开发工具快速上手指南
  • SongGeneration实战指南:从零开始构建AI音乐生成系统
  • 如何快速上手GitNext:OpenHarmony专属Git客户端完整指南