您的位置:首页 > 其它

【NOIP2010】【P1317】乌龟棋

2016-09-16 14:21 387 查看
似乎很像搜索的DP(应该也可以用搜索写)

原题:

小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。
乌龟棋的棋盘是一行N 个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一的起点,第N 格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int f[50][50][50][50];
int n,m,a[1100],num[5];
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m;
for(int i=1;i<=n;i++)  cin>>a[i];
int _id;
for(int i=1;i<=m;i++){  cin>>_id;  num[_id]++;}
for(int i=1;i<=num[1]+1;i++)
for(int j=1;j<=num[2]+1;j++)
for(int p=1;p<=num[3]+1;p++)
for(int q=1;q<=num[4]+1;q++){
f[i][j][p][q]=max(f[i][j][p][q],f[i-1][j][p][q]);
f[i][j][p][q]=max(f[i][j][p][q],f[i][j-1][p][q]);
f[i][j][p][q]=max(f[i][j][p][q],f[i][j][p-1][q]);
f[i][j][p][q]=max(f[i][j][p][q],f[i][j][p][q-1]);
f[i][j][p][q]+=a[i-1+(j-1)*2+(p-1)*3+(q-1)*4+1];
}
cout<<f[num[1]+1][num[2]+1][num[3]+1][num[4]+1]<<endl;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: