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

day 2

写了一道简单的dp,题目:https://codeforces.com/problemset/problem/2050/E
题目大意:给你三个字符串a,b,c。每一次可以选a或b的开头一个字母加到答案字符串后面,选择的字母从原来的字符串删除,求答案字符串和c最少有几个不同。
很明显dp,在看数据量,a和b小于等于1000,可以想到n方的dp,dp数组为dp[i][j],表示已经用了前i个,b已经用了前j个所得到的最小不同数量。
那么状态转移方程就很简单了
代码:

include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 1e3 + 10;

int dp[N][N];

void solve()
{
string a,b,c;
cin >> a >> b >> c;
int la = a.size(),lb = b.size();
memset(dp,114514,sizeof dp);
dp[0][0] = 0;
for(int i = 1;i<=la;i++)
{
dp[i][0] = dp[i-1][0] + (a[i-1] != c[i-1]);
}
for(int i = 1;i<=lb;i++)
{
dp[0][i] = dp[0][i-1] + (b[i-1] != c[i-1]);
}

for(int i = 1;i<=la;i++)
{for(int j = 1;j<=lb;j++){dp[i][j] = min(dp[i-1][j] + (a[i-1] != c[i+j-1]),dp[i][j-1] + (b[j-1] != c[i+j-1]));}
}
cout << dp[la][lb] << endl;

}

signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);

int t;
cin >> t;
while (t--)solve();
return 0;

}

http://www.hskmm.com/?act=detail&tid=32616

相关文章:

  • 日志分析-windows日志分析base
  • 2025/10/16 模拟赛笔记 - sb
  • 课后作业3
  • KMP和Manacher
  • 10月16日日记
  • 日志|二叉树|404左叶子之和|112路径总和|129求根节点到叶子节点数字之和|
  • 第 5 天:C 语言运算符与表达式 —— 数据处理的优秀的工具集
  • mongoDB体验
  • TELUS如何通过Google技术栈实现业务增长与生产力跃升
  • 云服务器上部署 EasyTier中转服务器
  • 问世界
  • 为 .NET 10 GC(DATAS)做准备
  • LLM学习记录DAY3
  • 日总结 13
  • 黄景行电脑软件
  • 开源许可协议 gpl vs mit?
  • 二进制警报器
  • 题解:P8019 [ONTAK2015] OR-XOR
  • DP 思维好题(转载)
  • python sse的是什么?
  • idea代码阿里格式化
  • 万字长文详述单据引擎原理、流程、单据管理 - 智慧园区
  • windows 链接共享打印机出现错误0x00000709?打印机0x0000011b错误?0x0000bcd、0x00000709、0x00000011b
  • 解码Linux文件IO目录检索与文件属性
  • p66实验题
  • 【比赛记录】2025NOIP 冲刺模拟赛合集I
  • 20251016
  • C# - 串口助手
  • 使用SpringBoot+MyBatisPlus实现增删改查
  • P4168 [Violet] 蒲公英题解