乌龟棋

来源:互联网 发布:编程语言历史发展 编辑:程序博客网 时间:2024/06/12 01:37

这一道题是一道动态规划的题。但是这道题的转移方程要想到还是有一点点难度的,一般都会想到5维的dp,但是这道题用5维明显会超时,所以再推一下会发现只用4维就可以了。
接下来就直接上代码了

#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;int f[50][50][50][50],a[500],b[6];int main() {    int n,p,m;    cin>>n>>m;    for(int i=1; i<=n; i++)        cin>>a[i];    f[0][0][0][0]=a[1];    for(int j=1; j<=m; j++) {        cin>>p;        b[p]++;    }    for(int i=0; i<=b[1]; i++)        for(int j=0; j<=b[2]; j++)            for(int z=0; z<=b[3]; z++)                for(int k=0; k<=b[4]; k++) {                    int l=i*1+j*2+z*3+k*4+1,mx=0;                    if (i)                        mx=max(f[i-1][j][z][k],mx);                    if (j)                        mx=max(f[i][j-1][z][k],mx);                    if (z)                        mx=max(f[i][j][z-1][k],mx);                    if (k)                        mx=max(f[i][j][z][k-1],mx);                    f[i][j][z][k]=mx+a[l];                }    cout<<f[b[1]][b[2]][b[3]][b[4]];}
原创粉丝点击