code
2023-01-28 11:38:15
发布于:山东
19阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int minn=-1e7-10;
int n,m,arr[1000],ans[5];
int dp[2][40][40][40];
inline int read()
{
char c=getchar();
register int x=0,s=1;
while(c<'0' or c>'9')
{
if(c=='-')
{
s=-1;
}
c=getchar();
}
while(c>='0' and c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return x*s;
}
void write(int x)
{
if(x<0)
{
putchar('-'),x=-x;
}
if(x>9)
{
write(x/10);
}
putchar(x%10+'0');
return;
}
int main()
{
n=read();
m=read();
for(register int i=1;i<=n;i++)
{
arr[i]=read();
}
int qwq;
for(register int i=1;i<=m;i++)
{
qwq=read();
ans[qwq]++;
}
dp[0][0][0][0]=arr[1];
for(register int i=0;i<=ans[1];i++)
{
for(register int j=0;j<=ans[2];j++)
{
for(register int k=0;k<=ans[3];k++)
{
for(register int l=0;l<=ans[4];l++)
{
register int sum=i&1;
register int awa=minn;
if(i!=0)
{
awa=max(awa,dp[sum^1][j][k][l]+arr[i+2*j+3*k+4*l+1]);
}
if(j!=0)
{
awa=max(awa,dp[sum][j-1][k][l]+arr[i+2*j+3*k+4*l+1]);
}
if(k!=0)
{
awa=max(awa,dp[sum][j][k-1][l]+arr[i+2*j+3*k+4*l+1]);
}
if(l!=0)
{
awa=max(awa,dp[sum][j][k][l-1]+arr[i+2*j+3*k+4*l+1]);
}
if(awa!=minn)
{
dp[sum][j][k][l]=awa;
}
}
}
}
}
write(dp[ans[1]&1][ans[2]][ans[3]][ans[4]]);
return 0;
}
这里空空如也
有帮助,赞一个