记录编号 |
410905 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2010]乌龟棋 |
最终得分 |
100 |
用户昵称 |
liuyu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.064 s |
提交时间 |
2017-06-02 21:36:19 |
内存使用 |
10.08 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[353],b,shu[5],win[40][40][40][40],Max=0,Min=0;
int main()
{
freopen("tortoise.in","r",stdin);
freopen("tortoise.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&b);
shu[b]++;
}
// win[0][0][0][0]=a[1];
// win[]
// win[1][1][1][1]
for(int i=0;i<=shu[4];i++)
for(int j=0;j<=shu[3];j++)
for(int x=0;x<=shu[2];x++)
for(int y=0;y<=shu[1];y++)
{
int o=y+x*2+j*3+i*4;
if(i)win[i][j][x][y]=max(win[i][j][x][y],win[i-1][j][x][y]);
if(j)win[i][j][x][y]=max(win[i][j][x][y],win[i][j-1][x][y]);
if(x)win[i][j][x][y]=max(win[i][j][x-1][y],win[i][j][x][y]);
if(y)win[i][j][x][y]=max(win[i][j][x][y],win[i][j][x][y-1]);
win[i][j][x][y]+=a[o+1];
//win[i+1][j+1][x+1][y+1]=max(max(max(win[i][j+1][x+1][y+1]+a[o],win[i+1][j][x+1][y+1]+a[o]),max(win[i+1][j+1][x][y+1]+a[o],win[i+1][j+1][x+1][y]+a[o])),win[i+1][j+1][x+1][y+1] );
Max=max(Max,win[i][j][x][y]);//printf("%d ",Max-Min);Min=Max;
}
printf("%d",Max);
return 0;
}