比赛 防止isaac的小练习day1 评测结果 AAAEEEEEEE
题目名称 乌龟棋 最终得分 30
用户昵称 zhjian 运行时间 3.530 s
代码语言 C++ 内存使用 0.33 MiB
提交时间 2016-11-01 10:37:04
显示代码纯文本
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<queue>
#define N 505
#define M 505
#define inf 0x3f3f3f3f
using namespace std;

int n,m,maxx;
int sc[N],v[5];
struct node{
	int s;
	int h;
	int v1,v2,v3,v4;
}dp[N];

queue<node> q;

int main(){
	freopen("tortoise.in","r",stdin);
	freopen("tortoise.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>sc[i];
	}
	for(int i=0;i<m;i++){
		int z;
		cin>>z;
		v[z]++;
	}
	node z;
	z.s=sc[1],z.h=1,z.v1=v[1],z.v2=v[2],z.v3=v[3],z.v4=v[4];
	q.push(z);
	while(!q.empty()){
		z=q.front();
		q.pop();
		if(z.h==n){
			maxx=max(maxx,z.s);
			continue;
		}
		if(z.v1>0){
			node zz=z;
			zz.s+=sc[z.h+1];
			zz.v1--;
			zz.h+=1;
			q.push(zz);
		}
		if(z.v2>0){
			node zz=z;
			zz.s+=sc[z.h+2];
			zz.v2--;
			zz.h+=2;
			q.push(zz);
		}
		if(z.v3>0){
			node zz=z;
			zz.s+=sc[z.h+3];
			zz.h+=3;
			zz.v3--;
			q.push(zz);
		}
		if(z.v4>0){
			node zz=z;
			zz.s+=sc[z.h+4];
			zz.h+=4;
			zz.v4--;
			q.push(zz);
		}
		
	}
	cout<<maxx;
	
	
	fclose(stdin);
	fclose(stdout);
	
	
	return 0;
}