#include<bits/stdc++.h> using namespace std; const int N = 2e3 + 7; int n,m,cost[N],dp[N][N]; char c,s[N]; int x,y; int main() { cin >> m >> n >> s + 1; while(m--) { cin >> c >> x >> y; cost[c - 'a'] = min(x,y); } for (int r = 1;r <= n; r++) for (int l = r - 1;l >= 1;l--) if(s[l] == s[r]) dp[l][r] = dp[l+1][r+1]; else dp[l][r] = min(dp[l+1][r] + cost[s[l] - 'a'],dp[l][r-1] + cost[s[r] - 'a']); cost<<dp[l][n]<<endl; return 0; }哪里有错
时间: 2024-04-09 20:28:54 浏览: 60
在您提供的代码中,有几个问题需要修正:
1. `cost<<dp[l][n]<<endl;` 这行代码应该是 `cout << dp[1][n] << endl;` 才能正确输出结果。
2. 在循环 `for (int r = 1;r <= n; r++)` 和 `for (int l = r - 1;l >= 1;l--)` 中,变量 `r` 和 `l` 的初始值应为 1,而不是 0。
修正后的代码如下:
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 7;
int n,m,cost[N],dp[N][N];
char c,s[N];
int x,y;
int main()
{
cin >> m >> n >> (s + 1);
while(m--)
{
cin >> c >> x >> y;
cost[c - 'a'] = min(x,y);
}
for (int r = 1;r <= n; r++)
for (int l = r - 1;l >= 1;l--)
if(s[l] == s[r])
dp[l][r] = dp[l+1][r+1];
else
dp[l][r] = min(dp[l+1][r] + cost[s[l] - 'a'],dp[l][r-1] + cost[s[r] - 'a']);
cout << dp[1][n] << endl;
return 0;
}
```
修正后的代码应该可以正确编译和执行了。
阅读全文