AcWIng夏季每日一题--序列最大收益

https://www.acwing.com/problem/content/3502/

 

 

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 int n,k,m;
 6 const int N = 210;
 7 int a[N],w[N][N];
 8 int f[N][N];
 9 int main()
10 {
11     cin>>n>>k>>m;
12     for(int i=1;i<=m;i++) cin>>a[i];
13     
14     for(int i=1;i<=n;i++)
15         for(int j=1;j<=n;j++)
16             cin>>w[i][j];
17     //初始化为f[0][0]=0;
18     for(int i=1;i<=m;i++){
19         for(int j=0;j<=k;j++){
20             for(int u=1;u<i;u++){
21                 if(j>=(i-u-1)){
22                     f[i][j]=max(f[i][j],f[u][j-(i-u-1)]+w[a[u]][a[i]]);
23                 }
24             }
25         }
26     }
27     int res=0;
28     for(int i=0;i<=m;i++){
29         for(int j=0;j<=k;j++){
30             res=max(f[i][j],res);
31         }
32     }
33     cout<<res;
34     return 0;
35 }

 

posted on 2021-05-17 22:08  greenofyu  阅读(21)  评论(0编辑  收藏  举报