1 solutions

  • -1
    @ 2025-6-8 19:04:33

    两个豆子就4维dp,数据量小为所欲为

    其实也可以搜索做,一次枚举两个豆子的走法,可以两个都往上,一个往上一个往右,或者连个都往右

    懒得写太多,自己看自己悟

    #include<bits/stdc++.h>
    using namespace std;
    int n,x,y,z,dp[90][90][90][90],a[90][90];
    int main(){
    	cin>>n;
        while(true){
        	cin>>x>>y>>z;
        	if(x==0&&y==0&&z==0){
        		break;
    		}
    		a[x][y]=z;
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			for(int k=1;k<=n;k++){
    				for(int l=1;l<=n;l++){
    					dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i][j-1][k][l-1]),
    					max(dp[i][j-1][k-1][l],dp[i-1][j][k][l-1]))+a[i][j]+a[k][l];//四种走法
    					if(i==k&&j==l){
    						dp[i][j][k][l]-=a[i][j];//处理重复点
    					}
    				}
    			}
    		}
    	}
    	cout<<dp[n][n][n][n];
    	return 0;
    }
    • 1

    Information

    ID
    4
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    4
    Tags
    # Submissions
    16
    Accepted
    8
    Uploaded By