比赛 |
防止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;
}