wo是完全不懂为啥只过了45% for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ dp[i][j]=-1;//初始化为-1 if(i==1&&j==1){ dp[i][j]=a[i][j]; continue; } if(i-1>=1&&dp[i-1][j]>=0){//可以转移 if(s[i-1][j]==s[i][j]){//相同 dp[i][j]=max(dp[i-1][j]+a[i][j],dp[i][j]); } if(s[i-1][j]!=s[i][j]&&dp[i-1][j]-k>=0){//不相同 dp[i][j]=max(dp[i-1][j]+a[i][j]-k,dp[i][j]); } } if(j-1>=1&&dp[i][j-1]>=0){//可以转移的必要条件 if(s[i][j-1]==s[i][j]){//相同 dp[i][j]=max(dp[i][j],dp[i][j-1]+a[i][j]); } if(s[i][j-1]!=s[i][j]&&dp[i][j-1]-k>=0){//不相同 dp[i][j]=max(dp[i][j],dp[i][j-1]+a[i][j]-k); } } ans=max(ans,dp[i][j]);//更新结果 } }