Hungry Canadian

Hungry Canadian(简单dp)

具体见代码注释

 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 }

猜你喜欢

转载自www.cnblogs.com/wsy107316/p/11656349.html