题解

zhuhanming 2022-11-19 11:22:43 11 返回题目

#include<bits/stdc++.h>
using namespace std;
int n,m,s1,s2,s3,s4;
int a[350];
int f[42][42][42][42];
int h(int i1,int i2,int i3,int i4){
	return i1+i2+i2+i3+i3+i3+i4+i4+i4+i4+1;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		int x;
		cin>>x;
		if(x==1)s1++;
		if(x==2)s2++;
		if(x==3)s3++;
		if(x==4)s4++;
	}
	for(int i1=0;i1<=s1;i1++){
		for(int i2=0;i2<=s2;i2++){
			for(int i3=0;i3<=s3;i3++){
				for(int i4=0;i4<=s4;i4++){
					if(i1<s1){
						f[i1+1][i2][i3][i4]=max(f[i1+1][i2][i3][i4],f[i1][i2][i3][i4]+a[h(i1+1,i2,i3,i4)]);
					}
					if(i2<s2){
						f[i1][i2+1][i3][i4]=max(f[i1][i2+1][i3][i4],f[i1][i2][i3][i4]+a[h(i1,i2+1,i3,i4)]);
					}
					if(i3<s3){
						f[i1][i2][i3+1][i4]=max(f[i1][i2][i3+1][i4],f[i1][i2][i3][i4]+a[h(i1,i2,i3+1,i4)]);
					}
					if(i4<s4){
						f[i1][i2][i3][i4+1]=max(f[i1][i2][i3][i4+1],f[i1][i2][i3][i4]+a[h(i1,i2,i3,i4+1)]);
					}
				}
			}
		}
	}
	cout<<f[s1][s2][s3][s4]+a[1]<<"\n";
	return 0;
}
{{ vote && vote.total.up }}