P1298(矩陣切割)DP

2022-08-16 14:00:19 字數 842 閱讀 9979

題目:

給你乙個矩陣,其邊長均為整數。你想把矩陣切割成總數最少的正方形,其邊長也為整數。切割工作由一台切割機器完成,它能沿平行於矩形任一邊的方向,從一邊開始一直切割到另一邊。對得到的矩形再分別進行切割。

輸入資料:

輸入檔案中包含兩個正整數,代表矩形的邊長,每邊長均在1—100之間。

輸出資料:

輸出檔案包含一行,顯示出你的程式得到的最理想的正方形數目。

輸入輸出示例:

cuts.in:

5 6cuts.out:

5這道題呢可以用dfs+記憶化搜尋,因為正在學習dp,所以就用dp寫了

所以就用乙個陣列f[i][j]表示邊長為i,j的矩形可以分出最少的正方形

所以就可知if(i==j)  f[i][j]=1;      所以就可以知道狀態轉移方程為:f[i][j]=min

(這裡面f[i][k1]+f[i][j-k1]表示將矩形橫著切開以後分成的兩塊包含的最少的矩形,同理可得f[k2][j]+f[i-k2][j]是豎著切開後兩塊的最少矩形) 1<=k1

**如下:

#include#include

#include

#include

using

namespace

std;

int f[2100][2100

];int a[2100][2100

];int

main()

for(int i=1;i<=n;i++)

for(int k=1;k//

豎著切 }

}/*for(int i=1;i<=n;i++)

view code

洛谷P1298 最接近的分數

給出乙個正小數,找出分子 非負 不超過m,分母不超過n 正數 的最簡分數或整數,使其最接近給出的小數。最接近 是指在數軸上該分數距離給出的小數最近,如果這個分數不惟一,輸出 too many 輸入格式 輸入檔案共有二行,第一行包含兩個用空格隔開的正整數m和n 1 m,n 107 表示要求的分數其分子...

P1357 花園 矩陣快速冪 DP

題意 乙個只含字母c和p的環形串 求長度為n且每m個連續字元不含有超過k個c的方案數 m 5 n 1e15 題解 用乙個m位二進位制表示狀態 轉移很好想 但是這個題是用矩陣快速冪加速dp的 因為每一位的轉移都是一樣的 用乙個矩陣表示狀態i能否轉移到狀態j 然後跑一遍 統計答案特別講究 因為是乙個環 ...

P1005 矩陣取數遊戲 區間dp

帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的 m n 的矩陣,矩陣中的每個元素 a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 ...