动态规划——收集样本机器人问题

#include <iostream>
using namespace std;
int****h, **p;
void val(int x1,int y1,int x2,int y2,int v,int n)
{
    if(x1==n||x2==n||y1==n||y2==n)
        return ;
    if(x1==x2&&y1==y2)
        h[x1][y1][x2][y2]=max(h[x1][y1][x2][y2],p[x1][y1]+v);
    else
        h[x1][y1][x2][y2]=max(h[x1][y1][x2][y2],p[x1][y1]+p[x2][y2]+v);
}
int sampleSelect(int n)
{
    int x1,y1,x2,y2,v;
    h=new int***[n];
    for(int i=0;i<n;i++)
    {
        h[i]=new int**[n];
        for(int j=0;j<n;j++)
        {
            h[i][j]=new int*[n];
            for(int x=0;x<n;x++)
            {
                h[i][j][x]=new int[n];
                for(int y=0;y<n;y++)
                    h[i][j][x][y]=0;
            }
        }
    }
    for(int s=1;s<2*n-1;s++)
        for(x1=0;x1<s-1;x1++)
            for(x2=0;x2<s-1;x2++)
        {
            y1=s-1-x1;y2=s-1-x2;
            if(x1<n&&x2<n&&y1<n&&y2<n)
            {
            v=h[x1][y1][x2][y2];
            val(x1+1,y1,x2+1,y2,v,n);
            val(x1+1,y1,x2,y2+1,v,n);
            val(x1,y1+1,x2+1,y2,v,n);
            val(x1,y1+1,x2,y2+1,v,n);
            }
        }
    return v;
}
int main()
{
    int n,a,b,c;
    cin>>n;
    p=new int* [n];
    for(int i=0;i<n;i++)
    {
         p[i]=new int[n];
         for(int j=0;j<n;j++)
            p[i][j]=0;
    }

    while(true)
    {
        cin>>a>>b>>c;
      if(!a&&!b&&!c)
        break;
      p[a][b]=c;
    }
    cout << sampleSelect(n)<< endl;
    return 0;
}

经验分享 程序员 微信小程序 职场和发展