Hungry Canadian
具体见代码注释
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 typedef long long ll; 8 #define maxn 10010 9 #define inf 0x3f3f3f3f; 10 int f[maxn][26];//f[i][j]表示第i位为字母j的权值 11 int a[26][26],n; 12 13 void scan() 14 { 15 int i,j; 16 scanf("%d",&n); 17 for(i=0;i<26;i++) 18 { 19 for(j=0;j<26;j++) 20 scanf("%d",&a[i][j]); 21 } 22 } 23 24 void solve() 25 { 26 for(int i=2;i<=n;i++) 27 { 28 for(int j=0;j<26;j++) 29 { 30 for(int k=0;k<26;k++) 31 { 32 f[i][j]=min(f[i][j],f[i-1][k]+a[k][j]);//f[i-1][k]+a[k][j],第i-1位选k,第i位选j 33 } 34 } 35 } 36 int ans=inf; 37 for(int i=0;i<26;i++) 38 { 39 ans=min(ans,f[n][i]); 40 } 41 printf("%d\n",ans); 42 } 43 44 int main() 45 { 46 memset(f,0x3f,sizeof(f)); 47 memset(f[1],0,sizeof(f[1])); 48 scan(); 49 solve(); 50 return 0; 51 }