傳送門
解題思路:對角線可以是從左上角到右下角,也可以是從右上角到左下角,所以答案需要求兩次,去最大的。先討論從左上角到右下角。dp[i][j]為以(i,j)點為右端點的能吃到的最多的魚,由於需要子矩陣的其他地方沒有魚,所以需要兩個輔助陣列,分別統計(i,j)這點向上有多少個連續的0,向左有多少個連續的0。所以我們可以得到 dp[i][j]=min(dp[i−1][j−1], up[i−1][j], left[i][j−1])+1
從右上角到左下角也是一樣的討論。
#includeusing namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=2505;
int n,m,a[maxn][maxn];
int dp[maxn][maxn],up[maxn][maxn],row[maxn][maxn];
int main()
else
} }memset(dp,0,sizeof(dp));
memset(row,0,sizeof(row));
for(int i=1;i<=n;++i)
else
} }cout
}
luoguP1736 創意吃魚法(DP)
傳送門 f i j 0 表示從右下角到左上角,以 i,j 為起點能延伸的最大值 f i j 1 表示從左下角到右上角,以 i,j 為起點能延伸的最大值 up i j 表示 i,j 上面有多少個0 left i j 表示 i,j 左邊有多少個0 right i j 表示 i,j 右邊有多少個0 f i...
LG P1736 創意吃魚法
終於找到一點dp的門路了 但還是差的遠 這個是為數不多的我自己寫出來狀態轉移方程的乙個dp題 回到家中的貓貓把三桶魚全部轉移到了她那長方形大池子中,然後開始思考 到底要以何種方法吃魚呢 貓貓就是這麼可愛,吃魚也要想好吃法 她發現,把大池子視為01矩陣 0表示對應位置無魚,1表示對應位置有魚 有助於決...
P1736 創意吃魚法
題意 有乙個n m的01矩陣,求最長的一條由1構成的斜線的長度,這條斜線所在矩陣的其它位置都必須是0 當前的狀態時右下角那個1,x表示這個位置向左最多可以延申x個0,y表示這個位置向上最多可以延申y個0。那麼就清楚了,這個位置的狀態由左上方的那個1以及x和y轉移,是它們中最小的那個值 1 dp i ...