找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 83|回复: 1

请按照要求写代码

[复制链接]

3万

主题

775

回帖

161万

积分

论坛元老

积分
1616008
发表于 2023-5-12 20:38:30 | 显示全部楼层 |阅读模式
请按照要求用C++实现
【问题描述】
小明最近迷上了字符串操作。对每个字符串,小明每次可以执行以下两种操作之一:
1、把字符串中的某个字符改成任意一个其他字符,花费1的代价。
2、交换字符串中的两个字符,花费0的代价。
小明发现,把一个字符串通过一系列的操作,可以转换成任何一个与之等长的字符串。例如,把“hello”变为“world”的一种代价为3的操作序列如下:
1、hello→wello(替换h为w,代价为1)
2、wello→wolle(交换e和o,代价为0)
3、wolle→worle(替换l为r,代价为1)
4、worle→world(替换e为d,代价为1)
小明发现,无法用少于3次的代价将“hello”变为“world”。
显然,不同的转换方案花费的代价是不同的,请编程帮助小明计算把一个字符串上变为另一个字符串的最小代价。
本题中的字符串根据给定的初始数值s按以下规则生成:
for i=1,2,…,n
s←(s*345)mod 19997
第一个字符串的第i个字符的ASCII码为(97+(s mod 26))
for i=1,2,…,n
s←(s*345)mod 19997
第二个字符串的第i个字符的ASCII码为(97+(s mod 26))
【输 入】两个正整数n(字符串长度),s(数据生成器的初始数值)。1≤n≤1,000,1≤s≤19,997。
【输 出】将第一个字符串转换为第二个字符串的最少代价。
【样例输入】4 35
【样例输出】2
【样例说明】生成的字符串是“lzvv”和“xylv”,将第一个字符串变为第二个的最小代价为2。

3万

主题

1192

回帖

10万

积分

论坛元老

积分
103547
发表于 2023-5-12 20:39:03 | 显示全部楼层
  1. ++
  2. #include <iostream>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. const int MAXN = 1005;
  7. int n, s, dp[MAXN][MAXN], a[MAXN], b[MAXN];
  8. int main() {
  9.     cin >> n >> s;
  10.     // 生成两个字符串
  11.     for (int i = 1; i <= n; i++) {
  12.         s = (s * 345) % 19997;
  13.         a[i] = 'a' + s % 26;
  14.     }
  15.     for (int i = 1; i <= n; i++) {
  16.         s = (s * 345) % 19997;
  17.         b[i] = 'a' + s % 26;
  18.     }
  19.     // DP求解最小代价
  20.     for (int i = 0; i <= n; i++) {
  21.         for (int j = 0; j <= n; j++) {
  22.             if (i == 0 && j == 0) {
  23.                 dp[i][j] = 0;
  24.             } else if (i == 0) {
  25.                 dp[i][j] = dp[i][j - 1] + 1;
  26.             } else if (j == 0) {
  27.                 dp[i][j] = dp[i - 1][j] + 1;
  28.             } else {
  29.                 dp[i][j] = min(dp[i - 1][j - 1] + (a[i] != b[j]), min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));
  30.             }
  31.         }
  32.     }
  33.     cout << dp[n][n] << endl;
  34.     return 0;
  35. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

聊天机器人

Archiver|手机版|小黑屋|Discuz

GMT+8, 2024-5-14 05:03 , Processed in 1.776726 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表