【演算法 詳解】 二維動態規劃
馬攔過河卒
原題傳送門
這一到題目也是比較基礎的動態規劃,也可以理解為是遞推,主要是運用加法原理,思維難度不大。我們要求從
到
設 為從 走到 的方案總數,我們知道一定是有上面和左邊走來,所以只需要累加上面和左邊的方案數即可。我們得出:
我們來思考一下馬的問題:
1.當馬攔住了 或 的時候,攔住的且後面的必然走不到,所以停止賦值
2.如果馬攔住了 ,則不進行狀態轉移即可
程式碼如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int B1,B2,H1,H2;
cin>>B1>>B2>>H1>>H2;
int Vis[20][20]={};
int dx[9]={0,2,1,-1,-2,-2,-1,1,2};
int dy[9]={0,1,2,2,1,-1,-2,-2,-1};
for (int i=1;i<=9;i++)
{
int H3=H1+dx[i];
int H4=H2+dy[i];
if (H3>=0&&H4>=0)
Vis[H3][H4]=1;
}
int Find[20][20]={};
for (int i=0;i<=B2;i++)
if (Vis[0][i]==0)
Find[0][i]=1;
else
{
for (int j=i;j<=B2;j++)
Vis[0][j]==1;
break;
}
for (int i=0;i<=B1;i++)
if (Vis[i][0]==0)
Find[i][0]=1;
else
{
for (int j=i;j<=B1;j++)
Vis[j][0]=1;
break;
}
for (int X=1;X<=B1;X++)
for (int Y=1;Y<=B2;Y++)
if (Vis[X][Y]==0)
Find[X][Y]=Find[X-1][Y]+Find[X][Y-1];
cout<<Find[B1][B2];
return 0;
}
農田個數
題目描述
你的老家在農村。過年時,你回老家去拜年。你家有一片N×MN×M農田,將其看成一個N×MN×M的方格矩陣,有些方格是一片水域。你的農村伯伯聽說你是學計算機的,給你出了一道題: 他問你:這片農田總共包含了多少個不存在水域的正方形農田。
兩個正方形農田不同必須至少包含下面的兩個條件中的一條:
1 邊長不相等
2 左上角的方格不是同一方格
輸入格式
輸入資料第一行為兩個由空格分開的正整數N、M(1<=m< n <=1000)
第2行到第N+1行每行有M個數字(0或1),描述了這一片農田。0表示這個方格為水域,否則為農田(注意:數字之間沒有空格,而且每行不會出現空格)
輸出格式
滿足條件的正方形農田個數。
樣例資料
input
3 3
110
110
000
output
5
樣例解釋 邊長為1的正方形農田有4塊 邊長為2的正方形農田有1塊 合起來就是5塊
資料規模與約定
時間限制:1s
空間限制:256MB
求多少個正方形,我們設 為以 為右下角的正方形個數。如果你畫過圖,就能夠發現:右下角的個數就是以這個點右下角的最大正方形,因為大正方形包含了無數個小正方形,基於正方形的特殊性,我就不難知道這一個性質。然後我們就去考慮,如何去轉移,再通過畫圖可以發現:這個點所能形成的最大正方形與左邊的點,左上角的點和上面的點所能形成的最大正方形的個數的最小值有關,也就是 。那麼這個數值具體是多少呢?就是這個數值 ;即在原來形成的正方形的基礎上加上了這個右下角。因此,我們可以得到:
程式碼如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0;
int F[5000][5000];
char a[5000][5000];
inline int Min(int a,int b,int c)
{
return min(min(a,b),c);
}
int main()
{
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
cin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
cin>>a[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i][j]=='1')
F[i][j]=Min(F[i-1][j],F[i][j-1],F[i-1][j-1])+1;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
ans+=F[i][j];
cout<<ans<<endl;
fclose(stdin);fclose(stdout);
return 0;
}
矩陣切割
題目描述
給你一個矩陣,其邊長均為整數。你想把矩陣切割成總數最少的正方形,其邊長也為整數。切割工作由一臺切割機器完成,它能沿平行於矩形任一邊的方向,從一邊開始一直切割到另一邊。對得到的矩形再分別進行切割。
輸入格式
輸入檔案中包含兩個正整數,代表矩形的邊長,每邊長均在1—100之間。
輸出格式
輸出檔案包含一行,顯示出你的程式得到的最理想的正方形數目。
樣例資料
input
5 6
output
5
求什麼設什麼,設
為
所能組成的最少正方形,那麼必然可以得到初值:
同樣,我們應該如何去得到呢,
的矩形其實就是若干個小的矩形矩形得到,因此我們只需要在若干個小矩形和中求最小值即可。即:
相關推薦
【演算法 詳解】 二維動態規劃
馬攔過河卒 原題傳送門 這一到題目也是比較基礎的動態規劃,也可以理解為是遞推,主要是運用加法原理,思維難度不大。我們要求從 (0,0) ( 0
【演算法詳解】對於單調棧的重新理解
對於單調棧的重新理解 關於什麼是單調棧和為什麼要用單調棧: 亂頭髮節 地平線 Largest Rectangle in a Histogram 關於什麼是單調棧和為什麼要用單調棧: 單調棧,就是棧中的元
【演算法詳解】洗牌演算法
1. 問題描述 洗牌演算法是常見的隨機問題;它可以抽象成:得到一個M以內的所有自然數的隨機順序陣列。 常見問題描述: 1.將自然數1 ~ 100隨機插入到一個大小為100的陣列,無重複元素 2. 1 ~ 52張撲克牌重新洗牌 什麼是好的洗牌演算法: 洗牌之後,如果能夠保證
【經典問題】二維動態規劃問題:求最長公共子序列LCS
原博地址:http://blog.csdn.net/yysdsyl/article/details/4226630 http://blog.csdn.net/ljyljyok/article/details/77905681 證明:
【演算法詳解】揹包模板或模型詳解
01揹包 有N 件物品和一個容量為V 的揹包。放入第i 件物品耗費的空間 是vi,得到的價值是wi。求解將哪些物品裝入揹包可使價值總和最大。 根據題意,我們便可以設f[i][j]為已經裝了i件物品且最大容量為j得最大價值. 此時,我們就可以列舉i和j進行動
【H.264/AVC視訊編解碼技術詳解】二十、H.264的去塊濾波演算法
《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼
【習題詳解】動態規劃DP:硬幣遊戲 蛋糕
動態規劃DP硬幣蛋糕塔 硬幣 題目描述 農夫約翰的奶牛喜歡玩硬幣遊戲,因此他發明了一種稱為“Xoinc”的兩人硬幣遊戲。 初始時,一個有N(5 <= N <= 2,000)枚硬幣的堆疊放在地
【HDU 2255】【KM演算法模板題+KM演算法詳解】 奔小康賺大錢
描述: 奔小康賺大錢 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7453 Accepted S
【H.264/AVC視訊編解碼技術詳解】二十三、幀間預測編碼(1):幀間預測編碼的基本原理
《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼的形式操作一遍,才能對視訊壓
【H.264/AVC視訊編解碼技術詳解】二十二、熵編碼(7):語法元素的CABAC解析
《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼的形式操作一遍,才能對視訊壓
【圖文詳解】scrapy爬蟲與動態頁面——爬取拉勾網職位資訊(1)
5-14更新 注意:目前拉勾網換了json結構,之前是content - result 現在改成了content- positionResult - result,所以大家寫程式碼的時候要特別注意加上
【圖文詳解】scrapy爬蟲與動態頁面——爬取拉勾網職位資訊(2)
上次挖了一個坑,今天終於填上了,還記得之前我們做的拉勾爬蟲嗎?那時我們實現了一頁的爬取,今天讓我們再接再厲,實現多頁爬取,順便實現職位和公司的關鍵詞搜尋功能。 之前的內容就不再介紹了,不熟悉的請一定要去看之前的文章,程式碼是在之前的基礎上修改的
【習題詳解】動態規劃:線性DP
最長上升子序列LIS 問題:求一串數字的最長上升自序列 設f[i]為以第i位數字結尾的子序列的最大長度.當我們列舉i時,我們需要從左往右列舉i前面的數字j,若數字j小於數字i則說明數字i可以在以j結尾的序列之後,因此f[j]+1是一種方案數.若沒有比i小的時
海量資料處理演算法總結【超詳解】
【Bloom Filter】Bloom Filter(BF)是一種空間效率很高的隨機資料結構,它利用位陣列很簡潔地表示一個集合,並能判斷一個元素是否屬於這個集合。它是一個判斷元素是否存在集合的快速的概率演算法。Bloom Filter有可能會出現錯誤判斷,但不會漏掉判斷。也就是Bloom Filter判斷元素
【圖文詳解】HDFS基本原理
合並操作 ear 系統性能 重要 logs 允許 積累 帶寬 文件系統 本文主要詳述了HDFS的組成結構,客戶端上傳下載的過程,以及HDFS的高可用和聯邦HDFS等內容。若有不當之處還請留言指出。 當數據集大小超過一臺獨立的物理計算機的存儲能力時,就有必要對它進行分區,並存
【PPT詳解】曹歡歡:今日頭條算法原理
智能 mmu sde dib gap 讀書 class 頭條 相關性 【PPT詳解】曹歡歡:今日頭條算法原理 悟空智能科技 4月8日 公眾號後臺回復:“區塊鏈”,獲取區塊鏈報告 公眾號後臺回復:“sq”,進入區塊鏈分享社群 熱文推薦: 1000位專家推薦,20本區塊鏈
【考題詳解】 4月DP練習賽題解
跑步[Neal Wu, 2007] 奶牛們打算通過鍛鍊來培養自己的運動細胞,作為其中的一員,貝茜選擇的運動方式是每天進行N(1 <= N <= 10,000)分鐘的晨跑。在每分鐘的開始,貝茜會選擇下一分鐘是用來跑步還是休息。貝茜的體力限制了她跑步的距離。更具體地,如果貝茜
【習題詳解】搜尋
搜尋習題詳解 分數字 流星雨 安全回家 黑洞 分數字 題目描述 現有N件不可區分的物品,將它們分成10份,要求每份在1~3件之間,問有多少種方案,並按字典序輸出所有方案。 輸入格式 一個整數,表示N&l
【論文詳解】DPED:DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks
目錄 1.論文概述 2.效果展示 3.網路內容介紹 3.1作者的貢獻 3.2 網路資料 3.3 網路結構 3.4 損失函式 3.4.1顏色損失。 3.4.2紋理損失textures loss。 3.4.3內容損失 content loss。 3
【Diary】【2018-10-20】【RestTemplate詳解】
1.Get請求 第一種:getForEntity getForEntity函式,該方法返回的是ResponseEntity,該物件是SpringHttp請求響應的封裝,其中封裝了Http的幾個重要元素,比如Http請求狀態碼的列舉物件HttpStatus,還有Http的請