讨论 / 记搜AC
diaosipan 2014-08-14 01:11:23
点我顶贴 收藏 删除
#include<set>

#include<map>

#include<ctime>

#include<cmath>

#include<stack>

#include<queue>

#include<cstdio>

#include<string>

#include<cstdlib>

#include<cstring>

#include<iomanip>

#include<iostream>

#include<algorithm>

using namespace std;

int f[41][41][41][41],i,j,k,a[351],b[121],c[5],n,m;

int serch(int x)

{

if (f[c[1]][c[2]][c[3]][c[4]]) return f[c[1]][c[2]][c[3]][c[4]];

int xx,y,z,v;

xx=y=z=v=0;

if (c[1]){c[1]--;xx=serch(x-1)+a[x];c[1]++;}

if (c[2]){c[2]--;y=serch(x-2)+a[x];c[2]++;}

if (c[3]){c[3]--;z=serch(x-3)+a[x];c[3]++;}

if (c[4]){c[4]--;v=serch(x-4)+a[x];c[4]++;}

f[c[1]][c[2]][c[3]][c[4]]=max(xx,max(y,max(z,v)));

return f[c[1]][c[2]][c[3]][c[4]];

}

int main()

{

cin>>n>>m;

for(i=1;i<=n;i++)

cin>>a[i];

for(i=1;i<=m;i++)

{

cin>>b[i];

c[b[i]]++;

}

cout<<serch(n)+a[1];

}

查看更多回复
提交回复