Cod sursa(job #2851657)

Utilizator lolismekAlex Jerpelea lolismek Data 18 februarie 2022 22:53:20
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;
}