母题:矩阵中每个点有权值,每经过一个点就累加权值,求从a点到b点的最优(最大)路线。
题型1:
从左上到右下,只能向下或者向右
for 行
for 列
dp=max dp左,dp上;
扫一遍就行
有时可能会是bfs+记忆化搜索,仔细看题
题型2:
从左上到右上,只能向下、上、右,不能走重复的点。
这种题一定要单独求解每一列从左、上转移和从左、下转移的dp,最后求最大值(如果不单独求解,就会出现走重复点的情况,理解一下状态转移的概念就明白了)。
for(int j=2;j<=n;j++) dp[j][1]+=dp[j-1][1]; for(int j=2;j<=m;j++) { int temp[105]; for(int i=0;i<=n+1;i++) temp[i]=-INF; for(int i=1;i<=n;i++) temp[i]=dp[i][j]; for(int i=n;i>=1;i--) temp[i]+=Max(dp[i][j-1],temp[i+1]); for(int i=1;i<=n;i++) dp[i][j]+=Max(dp[i-1][j],dp[i][j-1]); for(int i=1;i<=n;i++) dp[i][j]=Max(dp[i][j],temp[i]); }
//TODO