[NOIP2008 提高组] 传纸条
由于两回的路线不相交
所以可以看为两个路径一上一下
代码可以用滚动数组写
也可三维,枚坐标,而另一个可以算出来
四位就很显而易见了
for(int i=1;i<=n;i++) {// dp[i][j][k][p]表示 for(int j=1;j<=m;j++) {//从ij到kp的最小值 for(int k=1;k<=n;k++) { for(int p=j+1;p<=m;p++) { dp[i][j][k][p]=max(dp[i-1][j][k-1][p], max(dp[i-1][j][k][p-1],max(dp[i][j-1][k-1][p],dp[i][j-1][k][p-1]) ))+a[i][j]+a[k][p]; } } } }//图的右下角(终点)的旁的两个点,必经过 cout<<dp[n][m-1][n-1][m]<< endl;

浙公网安备 33010602011771号