2023-08-17力扣每日一題

鏈接:

1444. 切披薩的方案數

題意:

給定一個矩陣,其中含有多個蘋果,需要切割k-1次,每次可以切割多行/多列,需要保證切割兩個部分都有蘋果,移除靠上/靠右的部分,對留下部分進行后續的切割,求有幾種切割方法

解:

男人不能快算法需要快!

這題需要通過兩部分節約時間,一部分是動態規劃,一部分是前綴和

這好像還是第一次寫二維前綴和(好像),主要是要記得移除重復部分,由于每次保留的是靠下/靠左的部分,所以求的是已i j 為起點的右下角和

動態規劃部分,我們需要一個三維的DP[k][i][j],分別代表從i j開始的右下角矩陣,成功切割k-1刀的方案數量

初始值是DP[1][i][j]=(sum[i][j] > 0),即這一整塊上存在蘋果

遞推公式需要判斷行切和列切,判斷條件非常巧妙,是整體蘋果數量 > 切割后剩下的蘋果數量,公式是整體+=切割后的部分

整體DP[temp][i][j],假設在i2位置進行切割,則判斷sum[i][j] > sum[i2][j],若為真即計算DP[temp][i][j]+=DP[temp-1][i2][j],要注意切割后所需的切割數-1

實際代碼:

#include<bits/stdc++.h>
using namespace std;
constexpr static int Mod=1E9+7; 
int ways(vector<string>& pizza, int k)
{int lgrow=pizza.size(),lgcol=pizza[0].length();vector<vector<int>>sum(lgrow+1,vector<int>(lgcol+1));vector<vector<vector<int>>>dp(k+1,vector<vector<int>>(lgrow+1,vector<int>(lgcol+1)));//初始化 for(int i=lgrow-1;i>=0;i--){for(int j=lgcol-1;j>=0;j--){sum[i][j]=sum[i+1][j]+sum[i][j+1]-sum[i+1][j+1]+(pizza[i][j]=='A');//二維前綴和 矩陣計算 dp[1][i][j]=sum[i][j]>0;}}//dp遞推 for(int dp_k=2;dp_k<=k;dp_k++){for(int i=lgrow-1;i>=0;i--){for(int j=lgcol-1;j>=0;j--){//行切割for(int i2=lgrow-1;i2>i;i2--){if(sum[i][j]>sum[i2][j])//切出來的有蘋果{dp[dp_k][i][j]+=dp[dp_k-1][i2][j];dp[dp_k][i][j]%=Mod;}}//列切割for(int j2=lgcol-1;j2>j;j2--){if(sum[i][j]>sum[i][j2])//切出來的有蘋果{dp[dp_k][i][j]+=dp[dp_k-1][i][j2];dp[dp_k][i][j]%=Mod;}}}}}return dp[k][0][0];
}
int main()
{int k;cin>>k;vector<string> pizza;string s;while(cin>>s) pizza.push_back(s);int ans=ways(pizza,k);cout<<ans<<endl;return 0;
}

限制:

  • 1 <= rows, cols <= 50
  • rows == pizza.length
  • cols == pizza[i].length
  • 1 <= k <= 10
  • pizza 只包含字符 'A' 和 '.' 。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40702.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT中的按鈕控件Buttons介紹

目錄 Buttons 按鈕控件 1、常用屬性介紹 2、按鈕介紹 2.1QPushButton 普通按鈕 2.2QtoolButton 工具按鈕 2.3Radio Button單選按鈕 2.4CheckButton復選按鈕 2.5Commam Link Button命令鏈接按鈕 2.6Dialog Button Box命令鏈接按鈕 Buttons 按鈕控件 在Qt里&#xff0c;…

Viobot開機指南

0.前言 本篇旨在讓每個拿到Viobot設備的用戶都能夠第一時間測試它的效果&#xff0c;以及將設備配置到自己的環境下面。 1.上電 首先&#xff0c;我們先要把設備接上電源線和網線&#xff0c;最簡單的方式就是網線直連電腦。 電源選用12V1.5A設備自帶的電源即可。 2.配置網…

JavaScript中的this指向,call、apply、bind的簡單實現

JavaScript中的this this是JavaScript中一個特殊關鍵字&#xff0c;用于指代當前執行上下文中的對象。它的難以理解之處就是值不是固定的&#xff0c;是再函數被調用時根據調用場景動態確定的&#xff0c;主要根據函數的調用方式來決定this指向的對象。this 的值在函數被調用時…

深入學習前端開發,掌握HTML、CSS、JavaScript等技術

課程鏈接&#xff1a; 鏈接: https://pan.baidu.com/s/1WECwJ4T8UQfs2FyjUMbxig?pwdi654 提取碼: i654 復制這段內容后打開百度網盤手機App&#xff0c;操作更方便哦 --來自百度網盤超級會員v4的分享 課程介紹&#xff1a; 第1周&#xff1a;HTML5基礎語法與標簽 &#x1f…

web集群學習:搭建 LNMP應用環境

目錄 LNMP的介紹&#xff1a; LNMP組合工作流程&#xff1a; FastCGI介紹&#xff1a; 1、什么是 CGI 2、什么是 FastCGI 配置LNMP 1、部署LNMP環境 2、配置LNMP環境 LNMP的介紹&#xff1a; 隨著 Nginx Web 服務的逐漸流行&#xff0c;又岀現了新的 Web 服務環境組合—…

【Spring Cloud 八】Spring Cloud Gateway網關

gateway網關 系列博客背景一、什么是Spring Cloud Gateway二、為什么要使用Spring Cloud Gateway三、 Spring Cloud Gateway 三大核心概念4.1 Route&#xff08;路由&#xff09;4.2 Predicate&#xff08;斷言&#xff09;4.3 Filter&#xff08;過濾&#xff09; 五、Spring …

如何使用Kali Linux進行密碼破解?

今天我們探討Kali Linux的應用&#xff0c;重點是如何使用它來進行密碼破解。密碼破解是滲透測試中常見的任務&#xff0c;Kali Linux為我們提供了強大的工具來幫助完成這項任務。 1. 密碼破解簡介 密碼破解是一種滲透測試活動&#xff0c;旨在通過不同的方法和工具來破解密碼…

力扣初級算法(數組拆分)

力扣初級算法&#xff08;數組拆分&#xff09; 每日一算法&#xff1a; 力扣初級算法&#xff08;數組拆分&#xff09; 學習內容&#xff1a; 1.問題描述 給定長度為 2n 的整數數組 nums &#xff0c;你的任務是將這些數分成 n 對, 例如 (a1, b1), (a2, b2), …, (an, bn) …

機器人CPP編程基礎-03變量類型Variables Types

機器人CPP編程基礎-02變量Variables 全文AI生成。 C #include<iostream>using namespace std;main() {int a10,b35; // 4 bytescout<<"Value of a : "<<a<<" Address of a : "<<&a <<endl;cout<<"Val…

[Openwrt]一步一步搭建MT7981A uboot、atf、openwrt-21.02開發環境操作說明

安裝ubuntu-18.04 軟件安裝包 ubuntu-18.04-desktop-amd64.iso 修改ubuntu管理員密碼 sudo passwd [sudo] password for w1804: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 更新ubuntu源 備份源 sudo cp /etc/apt/so…

CentO7.9安裝Docker

文章目錄 CentO7.9安裝Docker刪除舊版本的Docker安裝Docker倉庫安裝Docker安裝最新版本安裝指定版本 Docker安裝個NGINX查看Docker鏡像運行查看Docker進程查看啟動端口停止Docker容器 CentO7.9安裝Docker 刪除舊版本的Docker sudo yum remove docker \docker-client \docker-…

Vue+ElementUI實現選擇指定行導出Excel

這里記錄一下&#xff0c;今天寫項目時 的一個需求&#xff0c;就是通過復選框選中指定行然后導出表格中選中行的Excel表格 然后這里介紹一個工具箱(模板)&#xff1a;vue-element-admin 將它拉取后&#xff0c;運行就可以看到如下界面&#xff1a; 這里面的很多功能都已經實現…

【NAS群暉drive異地訪問】使用cpolar遠程訪問內網Synology Drive「內網穿透」

文章目錄 前言1.群暉Synology Drive套件的安裝1.1 安裝Synology Drive套件1.2 設置Synology Drive套件1.3 局域網內電腦測試和使用 2.使用cpolar遠程訪問內網Synology Drive2.1 Cpolar云端設置2.2 Cpolar本地設置2.3 測試和使用 3. 結語 前言 群暉作為專業的數據存儲中心&…

jupyter切換conda虛擬環境

環境安裝 conda install nb_conda 進入你想使用的虛擬環境&#xff1a; conda activate your_env_name 在你想使用的conda虛擬環境中&#xff1a; conda install -y jupyter 在虛擬環境中安裝jupyter&#xff1a; conda install -y jupyter 重啟jupyter 此時我們已經把該安裝…

也許你正處于《孤注一擲》中的“團隊”,要留心了

看完這部電影&#xff0c;心情久久不能平靜&#xff0c;想了很多&#xff0c;倒不是擔心自己哪天也成為“消失的yaozi”&#xff0c;而是在想&#xff0c;我們每天所賴以生存的工作&#xff0c;跟電影里他們的工作比&#xff0c;差別在哪里呢&#xff1f; 目錄 1. 產品的本質…

Linux系統下的性能分析命令

在 Linux 系統下&#xff0c;有許多用于性能分析和調試的命令和工具&#xff0c;可以幫助您識別系統瓶頸、優化性能以及調查問題。本文將介紹在性能分析過程中&#xff0c;可能使用到的一些命令。 以下是一些常用的性能分析命令和工具匯總&#xff1a; 命令功能簡述top用于實…

2023-08-16力扣每日一題

鏈接&#xff1a; 2682. 找出轉圈游戲輸家 題意&#xff1a; 環形1到n&#xff0c;從1開始&#xff0c;每次移動 第i次*k &#xff0c;當移動到出現過的序號時停下&#xff0c; 求沒移動到的數字 解&#xff1a; 簡單模擬題&#xff0c;我也以為有數學做法&#xff0c;可…

docker安裝部署

目錄 docker安裝部署 1.環境 2.安裝步驟 1.安裝必要工具 2.配置軟件源 3.修改軟件源 4.更新并下載docker 5.設置開機自啟 3.啟動docker 1.配置docker鏡像加速器 2.啟動服務 docker安裝部署 1.環境 centos7 2.安裝步驟 1.安裝必要工具 yum install -y yum-utils dev…

【QT+ffmpeg】QT+ffmpeg 環境搭建

1.qt下載地址 download.qt.io/archive/ 2. win10sdk 下載 https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 安裝 debug工具路徑 qtcreater會自動識別 調試器選擇

最長連續序列

題目&#xff1a; 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 示例 1&#xff1a; 輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&#xff1a;4 解釋&#xff1a;最長數字連續序列是…