秋招突擊——6/26~6/27——復習{二維背包問題——寵物小精靈之收服}——新作{串聯所有單詞的字串}

文章目錄

    • 引言
    • 復習
      • 二維背包問題——寵物小精靈之收服
        • 個人實現
          • 重大問題
        • 滾動數組優化實現
    • 新作
      • 串聯所有單詞的字串
        • 個人實現
        • 參考實現
    • 總結

引言

  • 今天應該是舟車勞頓的一天,頭一次在機場刷題,不學習新的東西了,就復習一些之前學習的算法了。

復習

二維背包問題——寵物小精靈之收服

以往的分析鏈接

  • 第一次分析
  • 第二次分析

在這里插入圖片描述
在這里插入圖片描述

個人實現
  • 這是第二次在做這道題,這是一個單純的二維背包問題,需要理清楚最后是要你輸出什么類型,先給20分鐘在開發網站上嘗試一下,然后在來具體分析。
#include <iostream>
#include <cstring>
#include <limits.h>using namespace std;const int N = 1010,M = 550,K = 110;// 其中的N表示的精靈球的數量,M是體力值,K是野生精靈的數量int nt[K],mt[K];
int f[K][N][M];int n,m,k;int main(){cin>>n>>m>>k;for(int i = 1;i <= k;i ++){cin>>nt[i]>>mt[i];}// 二維背包問題計算狀態轉移矩陣變化的int res = f[k][n][m-1];for(int i = 1;i <= k;i ++){// 針對第i個物體,只有判定抓或者不抓兩種情況for(int j = 0;j <= n;j ++){// 遍歷合法情況下的精靈球數量for(int l = 0 ;l <= m - 1;l ++){// 遍歷合法情況下的體力值,注意上下確界,體力值不能消耗完// 兩種情況,抓或者是不抓,對應需要處理邊界值的情況if (j-nt[i] >= 0 && l-mt[i] >= 0)f[i][j][l] = max(f[i-1][j][l],f[i-1][j-nt[i]][l-mt[i]] + 1);elsef[i][j][l] = f[i-1][j][l];res = max(f[i][j][l],res);}}}cout<<res<<" ";// 第二個維度進行判定for(int i = 1;i <= k;i ++) {// 針對第i個物體,只有判定抓或者不抓兩種情況for (int j = 1; j <= n; j++) {// 遍歷合法情況下的精靈球數量for (int l = 1; l <= m - 1; l++) {if (f[i][j][l] == 2)cout<<"("<<i<<","<<j<<","<<l<<"): "<<f[i][j][l]<<" "<<endl;}}}int cost_health = m;for(int i = 0;i < m;i ++){if(f[k][n][i] == res)cost_health = min(cost_health,i);}cout<<m - cost_health;
}
重大問題
  • 這里有一個重要的發現,就是就是如果使用原始的,不加滾動數組優化的,就得保證每一層之間都能夠將信息傳遞下來,不能因為不滿足條件,就直接跳過。
    • 這個bug看了好久,才發現,中間是斷層的,之前的決策信息是沒有傳遞下來的,所以最后一行都是空的。

在這里插入圖片描述

滾動數組優化實現
  • 這里可以使用滾動數組進行優化實現,因為每一次都是從前往后遍歷,然后用的是之前的數據。如果使用從后往前遍歷,就不需要修改上一個數組了,這里講的有點模糊,有點混亂。這里直接看我之前的分析吧,具體如下
  • 背包模板——采藥問題
  • 設計公式推導,不過不重要,很好記:完全背包問題——買書
  • 這個是公式推導的第二部分:完全背包問題——買書2

最終實現代碼如下

  • 實現起來真簡單,不得不說,確實厲害!
#include <iostream>
#include <cstring>
#include <limits.h>using namespace std;const int N = 1010,M = 550,K = 110;// 其中的N表示的精靈球的數量,M是體力值,K是野生精靈的數量int nt[K],mt[K];
int f[N][M];int n,m,k;int main(){cin>>n>>m>>k;for(int i = 1;i <= k;i ++){cin>>nt[i]>>mt[i];}// 二維背包問題計算狀態轉移矩陣變化的for(int i = 1;i <= k;i ++){// 針對第i個物體,只有判定抓或者不抓兩種情況for(int j = n;j >= nt[i];j --){// 遍歷合法情況下的精靈球數量for(int l = m - 1 ;l >= mt[i];l --){f[j][l] = max(f[j][l],f[j-nt[i]][l-mt[i]] + 1);}}}int res = f[n][m-1];cout<<res<<" ";int cost_health = m;for(int i = 0;i < m;i ++){if(f[n][i] == res)cost_health = min(cost_health,i);}cout<<m - cost_health;
}

新作

串聯所有單詞的字串

  • 題目鏈接
    在這里插入圖片描述
    在這里插入圖片描述
  • 這題跳了好幾次,后面好幾題都做了,終于是他了,兩天做這道題。

重點

  • words是由若干個子字符串構成的,然后可以按照任意順序進行拼接,形成n!個字符串,數量很大
  • 每一個字符字串進行匹配查找拼接,這又是一個問題的。每個都是n平方的時間復雜度,根本做不了的。n平方 * n!,這個時間復雜度太高了。根本實現不了的!
  • 可以在以下幾個地方做出精簡
    • 掃描一次,然后記錄所有相同長度,但是起點不同但是長度相同的字符串,然后在按照集合進行比較?這樣確實能夠縮減時間復雜度。
    • 嘗試使用不同的字符串進行優化?最長公共字串有用嗎?KMP算法?不得行!
  • 這樣吧,匹配出每一個字符串在源字符串的位置,然后將源字符串標注為不同的序列,直接返回對應的序列即可。但是這里有一個問題的,就是這幾個 word之間會出現嵌套的問題嗎?如果出現嵌套問題就不好做了。
個人實現
  • 字符串s重點長度為x的s.size() - x個子串中,和words中的每一個字符串進行匹配,然后進行標注。判定當前的字符串是相等的,過濾一遍的。記錄一下,每一個元素開始的位置,然后再向后進行遍歷,保證結果相同?
  • 沒有辦法保證word和word之間是沒有重疊的,這種情況肯定會出現,這就不知道怎么處理了。
  • 不想做了,今天好煩躁呀,還是直接看解說吧。
參考實現
  • 這里參考的y總的代碼,基本思路還是很簡答的,關鍵是如何將問題進行拆解,和我的思路比較像,但是有兩個地方沒有想到

    • 字符串的快速匹配可以使用hash實現,這里我并沒有考慮到,在我的設想里面只能使用遍歷實現
    • 兩個字符字串的匹配使用兩個hash表配合滑動窗口實現的
  • 具體思路分析圖如下

具體實現代碼如下

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;vector<int> findSubstring(string s,vector<string >& words){vector<int> res;// 邊界條件判定為空if (words.empty())  return res;// 定義words的長度和word的長度,以及整個string的長度int n = s.size(),m = words.size(),w = words[0].size();// 定義目標子串中的對應的hash表unordered_map<string,int> tot;for (auto s:words)  tot[s] ++;// 將待匹配的原始的字符串進行等距分割拼接for (int i = 0; i < w; ++i) {// 定義count記錄當前起點下的有效的字符子串的個數int cnt = 0;// 對每一個起點創建對應的字典字符串unordered_map<string,int> temp;for (int j = i; j < n; j += w) {// 如果長度大于滑動窗口的長度,需要彈出if (j >= i + m * w){// 已經超過了長度,需要彈出最初的元素auto st = s.substr(j - m * w,w);temp[st] --;// 判定彈出的元素是否有效if (temp[st] < tot[st])    cnt--;}// 需要往隊列中添加元素auto st = s.substr(j ,w);temp[st] ++;// 判定加入的元素是否有效if (temp[st] <= tot[st])    cnt ++;if (cnt == m)   res.push_back(j - (m - 1)*w );}}return res;
}int main(){}

總結

  • 剛到上海,總是有很多東西需要收拾,本來準備來實習的,結果的主管面還是把我拒了,確實沒有準備好呀,難受,現在就是單純來學習的了。心里悵然若失!不過無所謂了,先做著吧,盡力去做著吧。來了弄了蠻多家務的,昨天的都沒有交稿,脫了兩天,明天開始進入狀態了,調整一下,不能浪費時間!繼續卷吧!然后開始繼續弄的!

  • 今天挫敗感還是滿足的,感覺坐立不安,怎么都不舒服。

    • 換環境了?
    • 沒找到實習
  • 都有吧,好好干吧!

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

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

相關文章

百度Apollo的PublicRoadPlanner一些移植Ros2-foxy的思路(持續更新)

如今的PublicRoadPlanner就是之前耳熟能詳的EM planner 計劃 —— ROS2與CARLA聯合仿真 結構化場景: 規劃算法:EM-planner 控制算法:MPC和PID 非結構化場景: 規劃算法采用Hybrid A* (1)小車模型搭建(計劃參考Github上Hybrid上的黑車,比較炫酷) (2)車輛里程計: 位…

深入比較:Batch文件與Shell腳本的異同

在操作系統中&#xff0c;自動化腳本是一種常見的工具&#xff0c;用于執行一系列自動化命令或程序。Windows和類Unix系統都提供了各自的腳本解決方案&#xff1a;Batch文件&#xff08;在Windows中&#xff09;和Shell腳本&#xff08;在類Unix系統中&#xff09;。本文將詳細…

有哪些方法可以恢復ios15不小心刪除的照片?

ios15怎么恢復刪除的照片&#xff1f;在手機相冊里意外刪除了重要的照片&#xff1f;別擔心&#xff01;本文將為你介紹如何在iOS 15系統中恢復已刪除的照片。無需專業知識&#xff0c;只需要按照以下步驟操作&#xff0c;你就能輕松找回寶貴的回憶。 一、從iCloud云端恢復刪除…

SRC公益上分的小技巧一

前言 之前發布的文章&#xff0c;例如SRC中的一些信息收集姿勢- Track 知識社區 - 掌控安全在線教育 - Powered by 掌控者 里面就有提到若依系統&#xff0c;默認賬號密碼非常簡單 是 admin / admin123 但是&#xff0c;往往我們去挖掘的時候很容易出現 這說明了若依系統的門…

Viewer.js 圖片預覽插件使用

參考&#xff1a;Viewer.js 圖片預覽插件使用 demo鏈接&#xff1a;viewerjs_demo

【Linux:文件描述符】

文件描述符&#xff1a; 文件描述符的分配原則&#xff1a;最小未分配原則 每一個進程中有一個task_struct結構體&#xff08;PCB)&#xff0c;而task_struct中含有struct file_sturct*file的指針&#xff0c;該指針指向了一個struct files_struct的結構體該結構體中含有一個f…

PHP框架詳解- symfony框架

Symfony框架是一個開源的PHP框架&#xff0c;由SensioLabs公司開發并維護&#xff0c;最早發布于2005年。它旨在為Web應用程序的開發提供一個高效且結構化的環境。Symfony框架的設計理念是減少Web應用程序的創建和維護時間&#xff0c;并避免重復性任務。 Symfony框架采用MVC&…

PG最大連接數

在 PostgreSQL 數據庫中&#xff0c;您可以使用 SQL 查詢來獲取最大連接數、當前連接數以及每個數據庫的連接數。以下是一些常用的查詢&#xff1a; 查看最大連接數&#xff1a; PostgreSQL 的最大連接數由配置參數 max_connections 決定。您可以在 postgresql.conf 文件中設置…

使用IMAP服務獲取163郵箱的未讀郵件

使用IMAP服務獲取163郵箱的未讀郵件 整體的邏輯思路如下&#xff1a; 開啟163郵箱的IMAP服務&#xff0c;拿到授權碼用于登錄IMAP服務登錄IMAP服務&#xff0c;獲取郵箱的未讀郵件列表遍歷未讀郵件列表&#xff0c;獲取郵件內容 # 導入必要的庫 import os import imaplib im…

三大工作流引擎技術Activiti、Flowable、Camunda選型指南

文章目錄 前言1 流程引擎發展歷程2 流程引擎主要概念BPM (Business Process Management)BPMN (Business Process Model and Notation)CMMN (Case Management Model and Notation)DMN (Decision Model and Notation)事件&#xff08;Event&#xff09;順序流&#xff08;Sequenc…

從靜電到浪涌,全面防護:雷卯多電壓等級電源保護設計方案匯總

在當今數字化、電氣化日益加速的時代&#xff0c;電子設備和電力系統面臨著前所未有的挑戰&#xff0c;其中靜電放電(ESD)、浪涌以及雷擊等瞬態事件成為了威脅設備穩定性和壽命的關鍵因素。從精密的消費電子產品到工業級控制系統&#xff0c;從智能家居到新能源汽車&#xff0c…

區塊鏈技術的核心要素:共識機制、加密技術與分布式賬本

區塊鏈聽起來像個非常高大上的技術&#xff0c;其實它的核心原理并不難理解。今天我們要聊的就是區塊鏈的三個核心要素&#xff1a;共識機制、加密技術和分布式賬本。想象一下區塊鏈是一個巨大的數字筆記本&#xff0c;我們要弄清楚大家如何共同寫這個筆記本&#xff0c;又如何…

用一個實例看如何分享大量照片 續篇二,關于Exif (Exchangeable Image File) - 可交換圖像文件

續篇二&#xff1a;說說關于照片隱含的 Exif (Exchangeable Image File) 可交換圖像文件 數碼照片的Exif 參數有很多&#xff0c;重要的Exif信息&#xff1a;拍攝日期、時間、拍攝器材、GPS信息。 當然這主要對自己的檔案有意義&#xff0c;如果放到網上還是建議抹去這些信息。…

Bad owner or permissions on C:\\Users\\username/.ssh/config > 過程試圖寫入的管道不存在。

使用windows連接遠程服務器出現Bad owner or permissions 錯誤 問題&#xff1a; 需要修復文件權限 SSH 配置文件應具有受限權限以防止未經授權的訪問 確保只有用戶對該.ssh/config文件具有讀取權限 解決方案&#xff1a; 在windows下打開命令行&#xff0c;通過以下命令打開文…

C++編程(四)this指針 常函數 常對象 靜態成員

文章目錄 一、this指針&#xff08;一&#xff09;概念&#xff08;二&#xff09;顯式使用this指針的場景1. 當形參和成員變量名一致時2. 返回對象自身的時候必須要使用this指針3. 在類中銷毀一個對象 二、常函數和常對象&#xff08;一&#xff09;常函數1. 概念2. 語法格式 …

python OpenCV 庫中的 cv2.Canny() 函數來對圖像進行邊緣檢測,并顯示檢測到的邊緣特征

import cv2# 加載圖像 image cv2.imread(4.png)# 使用 Canny 邊緣檢測算法提取邊緣特征 edges cv2.Canny(image, 100, 200)# 顯示邊緣特征 cv2.imshow(Edges, edges) cv2.waitKey(0) cv2.destroyAllWindows() 代碼解析&#xff1a; 導入 OpenCV 庫&#xff1a; import cv2加…

【MFC】socket通信代碼解析

目錄 一、在MFC中使用Winsock進行socket編程 1.1 包含必要的頭文件 1.2 初始化Winsock 1.3創建socket 1.4 綁定socket 1.5 監聽連接(對于服務器) 1.6 建立連接(對于客戶端) 1.7 發送和接收數據 1.8. 關閉socket 1.9 錯誤處理 1.10 MFC集成 二、MFC中Socke…

PT100(RTD)是什么?2線,3線,4線原理

RTDs - or Resistance Temperature Detectors- (電阻式溫度探測器)&#xff0c;是溫度型傳感器&#xff0c;包含一個電阻&#xff0c;這個阻值可以隨溫度的變化而變化。在工業的進程中和實驗室里已經使用了很多年&#xff0c;以精確&#xff0c;可靠和穩定的特性。 2線制 2線制…

解決Ucharts在小程序上的層級過高問題

<qiun-wx-ucharts canvas2d"{{true}}" type"pie" opts"{{rectificationRateOpts}}" chartData"{{rectificationRateData}}" /> 開啟2d渲染即可解決&#xff08;在小程序開發工具上看著層級還是高&#xff0c;但是在手機上是正常…

C語言| 數組元素的刪除

同數組元素的插入差不多。 數組元素的插入&#xff0c;是先移動要插入元素位置后面的所有元素&#xff0c;再插入新元素&#xff0c;長度1。 C語言| 數組的插入-CSDN博客 數組元素的刪除&#xff0c;是先刪除元素&#xff0c;再把后面的元素往前移動一位&#xff0c;而本程序…