Pagini recente » Cod sursa (job #2055995) | Cod sursa (job #2165024) | Cod sursa (job #637271) | Cod sursa (job #2496738) | Cod sursa (job #2851657)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("redu.in");
ofstream fout("redu.out");
const int SIGMA = 26, N = 500;
int val[SIGMA][SIGMA], dp[N + 1][N + 1];
int main(){
int n; string lean;
fin >> n >> lean;
lean = "$" + lean;
for(int i = 0; i < SIGMA; i++)
for(int j = 0; j < SIGMA; j++)
fin >> val[i][j];
for(int i = 1; i < n; i++)
dp[i][i + 1] = min(val[lean[i] - 'a'][lean[i + 1] - 'a'], val[lean[i + 1] - 'a'][lean[i] - 'a']);
for(int len = 4; len <= n; len += 2){
for(int i = 1; i <= n - len + 1; i++){
dp[i][i + len - 1] = min(
dp[i][i + len - 3] + val[lean[i + len - 2] - 'a'][lean[i + len - 1] - 'a'],
min(
dp[i + 2][i + len - 1] + val[lean[i] - 'a'][lean[i + 1] - 'a'],
dp[i + 1][i + len - 2] + val[lean[i] - 'a'][lean[i + len - 1] - 'a']
)
);
}
}
fout << dp[1][n];
return 0;
}