1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include<string> #include<cstring> #include<algorithm> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include<iostream> #include<cstring> using namespace std; int n,m; int a[355],b[6]; int f[45][45][45][45]; int safeF(int i,int j,int k,int l){ if(i<0||j<0|k<0||l<0)return 0; else return f[i][j][k][l]; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++){ int t; cin>>t; b[t]++; } for(int i=0;i<=b[1];i++)for(int j=0;j<=b[2];j++)for(int k=0;k<=b[3];k++)for(int l=0;l<=b[4];l++){ f[i][j][k][l]=max(max(safeF(i-1,j,k,l),safeF(i,j-1,k,l)),max(safeF(i,j,k-1,l),safeF(i,j,k,l-1)))+a[i+2*j+3*k+4*l+1]; } cout<<f[b[1]][b[2]][b[3]][b[4]]; } |
洛谷 P1541 乌龟棋
发表评论