求助
查看原帖
求助
1562039
silent_coder987楼主2024/11/5 23:10

搞了给完整的四维dp,然后就过了样例和1个数据

救命啊!!!!!!!!

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,xin,yin,val,bas;
    int map[9][9]={0};
    int dp[17][9][9];
    cin>>n;
    while(1)
    {
        cin>>xin>>yin>>val;
        if(xin==0&&yin==0&&val==0) break;
        else map[xin][yin]=val;
    }
    dp[0][0][0]=map[0][0];
    for(int i=1;i<2*n-1;i++)
    {
        for(int j=max(0,i-n+1);j<=min(i,n-1);j++)
        {
            for(int k=max(0,i-n+1);k<=min(i,n-1);k++)
            {
                if(j==k) bas=map[j][i-j];
                else bas=map[j][i-j]+map[k][i-k];
                if(j!=0&&k!=0&&j!=i&&k!=i) dp[i][j][k]=bas+max(max(dp[i-1][j-1][k-1],dp[i-1][j][k-1]),max(dp[i-1][j-1][k],dp[i-1][j][k]));
                else if(j==0) 
				{
					if(k==0) dp[i][j][k]=bas+dp[i-1][j][k];
					else if(k==i) dp[i][j][k]=bas+dp[i-1][j][k-1];
					else dp[i][j][k]=bas+max(dp[i-1][j][k-1],dp[i-1][j][k]);
				}
                else if(k==0) 
                {
					if(j==i) dp[i][j][k]=bas+dp[i-1][j-1][k];
					else dp[i][j][k]=bas+max(dp[i-1][j-1][k],dp[i-1][j][k]);
				}
				else if(j==i) 
				{
					if(k==0) dp[i][j][k]=bas+dp[i-1][j-1][k];
					else if(k==i) dp[i][j][k]=bas+dp[i-1][j-1][k-1];
					else dp[i][j][k]=bas+max(dp[i-1][j-1][k-1],dp[i-1][j-1][k]);
				}
                else if(k==i) 
                {
					if(j==0) dp[i][j][k]=bas+dp[i-1][j][k-1];
					else dp[i][j][k]=bas+max(dp[i-1][j][k-1],dp[i-1][j-1][k-1]);
				}
            }
        }
    }
    cout<<dp[n*2-2][n-1][n-1];
    return 0;
}
2024/11/5 23:10
加载中...