首先发现一点,设第\(j\)列被打掉的砖块个数为\(k\),那么第\(j+1\)列被打掉的砖块个数应该大于等于\(k-1\)
那么记\(dp[j][i][k]\)表示第\(j\)列取了\(i\)个,总共取了\(k\)的最大分数,那么转移就是\(dp[j][i][k]=max(dp[j+1][l][k-i])+\sum_{t=1}^i a[t][j](l\geq i-1)\),维护一下前缀和然后转移便是
//minamoto#include#define fp(i,a,b) for(register int i=a,I=b+1;i I;--i)inline int max(const int &x,const int &y){return x>y?x:y;}inline int min(const int &x,const int &y){return x