【貪心算法】洛谷P1106 - 刪數問題

2025 - 12 - 26 - 第 46 篇
【洛谷】貪心算法題單 - 【貪心算法】 - 【學習筆記】
作者(Author): 鄭龍浩 / 仟濹(CSND賬號名)

目錄

文章目錄

  • 目錄
  • P1106 刪數問題
    • 題目描述
    • 輸入格式
    • 輸出格式
    • 樣例 #1
      • 樣例輸入 #1
      • 樣例輸出 #1
    • 提示
    • 思路
    • 代碼

P1106 刪數問題

題目描述

鍵盤輸入一個高精度的正整數 n n n(不超過 250 250 250 位),去掉其中任意 k k k 個數字后剩下的數字按原左右次序將組成一個新的非負整數。編程對給定的 n n n k k k,尋找一種方案使得剩下的數字組成的新數最小。

輸入格式

輸入兩行正整數。

第一行輸入一個高精度的正整數 n n n

第二行輸入一個正整數 k k k,表示需要刪除的數字個數。

輸出格式

輸出一個整數,最后剩下的最小數。

樣例 #1

樣例輸入 #1

175438 
4

樣例輸出 #1

13

提示

len ? ( n ) \operatorname{len}(n) len(n) 表示 n n n位數,保證 1 ≤ k < len ? ( n ) ≤ 250 1 \leq k < \operatorname{len}(n) \leq 250 1k<len(n)250

思路

刪除任意k個數字以后,如何保證是最小的數呢,如何去掉呢????
思路是這樣的,從做往右(高位到低位)依次兩兩比較,如果 arr[ i ] <= arr[ i + 1 ], 則無需管,直到遇到 arr[ i ] > arr[ i + 1 ], 這時候需要將 arr[ i + 1 ] 去掉
說白了,就是盡量讓這個數字保持升序,這樣才能保證最小 --> 高位數字小 --> 則整個數字小

所以,去掉的數字一般分為兩種情況

  1. 在 i ~ num - 1 的范圍內, 【有】 arr[ i ] > arr[ i + 1 ] 的清況 --> 去掉arr[ i + 1 ]
  2. 在 i ~ num - 1 的范圍內, 【無】 arr[ i ] > arr[ i + 1 ] 的清況 --> 去掉最后一位 --> 為什么是去掉最后一位呢,因為數字順序為升序的時候,最右側的數字是最大的,所以去掉
    ( 第 2 種情況 也無需再單獨去判斷了,因為內層循環中如果找不到arr[ i ] <= arr[ i + 1 ],退出循環的時候,i 會定位在 倒數第二個元素上面 )

最右側的數字相當于 --> 整個高精度正數少了一位 + 少了最大的數

程序過程:

  1. 最外層循環:用來控制循環次數 --> 循環 k 次 --> 刪掉 k 個數字
  2. 最內層循環:用來尋找 arr[ i ] < arr[ i + 1 ] 的情況,如果遇到,則退出循環,將 i 定位在 5 處( 比如 1 2 3 4 5 1 ),退出循環以后將 5 刪除即可

借用的函數: erase(a, b) --> 刪除函數 --> STL容器

高峰期–> 我的理解就是 從左往右依次兩兩比較,只要遇到不是 arr[ i ] <= arr[ i + 1 ] 而是 arr[ i ] > arr[ i + 1 ], 則 arr[ i ] 就是這個高峰期
簡單點說,就是盡可能的讓高位數字的順序為升序 --> 因為 高位數字小, 則整個 高精度數字 就小

變量:
arr --> 存放高精度正整數
k --> 要刪除的數字的數量
i --> 決定 高峰 的位置

代碼

// 洛谷P1106 刪數問題
// 作者: 鄭龍浩 / 仟濹(CSDN)
// 時間:2025 - 01 -22
// 鍵盤輸入一個高精度的正整數 n(不超過 250 位),去掉其中任意 k 個數字后剩下的數字按原左右次序將組成一個新的非負整數。編程對給定的 n 和 k,
// 尋找一種方案使得剩下的數字組成的新數最小。// 看的這個大佬的題解,我才會這么做的 https://www.luogu.com.cn/article/qgschm0n// 思路:
// 刪除任意k個數字以后,如何保證是最小的數呢,如何去掉呢????
// 思路是這樣的,從做往右(高位到低位)依次兩兩比較,如果 arr[ i ] <= arr[ i + 1 ], 則無需管,直到遇到 arr[ i ] > arr[ i + 1 ], 這時候需要將 arr[ i + 1 ] 去掉
// 說白了,就是盡量讓這個數字保持升序,這樣才能保證最小 --> 高位數字小 --> 則整個數字小// 所以,去掉的數字一般分為兩種情況
// 1. 在 i ~ num - 1 的范圍內, 【有】 arr[ i ] > arr[ i + 1 ] 的清況 --> 去掉arr[ i + 1 ]
// 2. 在 i ~ num - 1 的范圍內, 【無】 arr[ i ] > arr[ i + 1 ] 的清況 --> 去掉最后一位 --> 為什么是去掉最后一位呢,因為數字順序為升序的時候,最右側的數字是最大的,所以去掉
// ( 第 2 種情況 也無需再單獨去判斷了,因為內層循環中如果找不到arr[ i ] <= arr[ i + 1 ],退出循環的時候,i 會定位在 倒數第二個元素上面 )// 最右側的數字相當于 --> 整個高精度正數少了一位 + 少了最大的數、
// 程序過程:
// 1. 最外層循環:用來控制循環次數 --> 循環 k 次 --> 刪掉 k 個數字
// 2. 最內層循環:用來尋找 arr[ i ] < arr[ i + 1 ] 的情況,如果遇到,則退出循環,將 i 定位在 5 處( 比如 1 2 3 4 5 1 ),退出循環以后將 5 刪除即可//借用的函數:erase(a, b) --> 刪除函數 --> STL容器// 高峰期 --> 我的理解就是 從左往右依次兩兩比較,只要遇到不是 arr[ i ] <= arr[ i + 1 ] 而是 arr[ i ] > arr[ i + 1 ], 則 arr[ i ] 就是這個高峰期
// 簡單點說,就是盡可能的讓高位數字的順序為升序 --> 因為 高位數字小, 則整個 高精度數字 就小// 變量:
// arr --> 存放高精度正整數
// k --> 要刪除的數字的數量
// i --> 決定 高峰 的位置#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main( void ){string arr; // 表示的 高精度正整數int k; // 表示的 要刪除的數字數量cin >> arr >> k;while( k ){// 尋找 高峰期int i;for( i = 0; arr[ i ] <= arr[ i + 1 ] && i < arr.size() - 1; i ++ ); // 非常簡潔 --> 尋找 高峰期(第一次知道這個詞語,從題解中看到的,因為我自己不知道用什么詞語可以表達找到的這個元素)arr.erase( i, 1 ); // 從第 i 個位置連續刪 1 個元素k --;}// 處理前導零 --> 如果本來的 高精度正整數 前面幾個為0,則不能將其打出來, 應該將它們去掉while( arr [ 0 ] == '0' && arr.size() > 1 ) {//處理前導零, 并且保證如果數字為0,則必須保留一位0 arr.erase( 0, 1 );}cout << arr;return 0;
}

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

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

相關文章

Oracle 創建并使用外部表

目錄 一. 什么是外部表二. 創建外部表所在的文件夾對象三. 授予訪問外部表文件夾的權限3.1 DBA用戶授予普通用戶訪問外部表文件夾的權限3.2 授予Win10上的Oracle用戶訪問桌面文件夾的權限 四. 普通用戶創建外部表五. 查詢六. 刪除 一. 什么是外部表 在 Oracle 數據庫中&#x…

基于FPGA的BPSK+costas環實現,包含testbench,分析不同信噪比對costas環性能影響

目錄 1.算法仿真效果 2.算法涉及理論知識概要 3.Verilog核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 本作品是之前作品的改進和擴展&#xff1a; 1.m基于FPGA的BPSK調制解調通信系統verilog實現,包含testbench,包含載波同步_csdn基于fpga的bpsk-CSDN博客 2.m基于FP…

Linux 目錄操作詳解

Linux目錄操作詳解 1. 獲取當前工作目錄1.1 getcwd()1.2 get_current_dir_name() 2. 切換工作目錄2.1 chdir() 3. 創建和刪除目錄3.1 mkdir()3.2 rmdir() 4. 獲取目錄中的文件列表4.1 opendir() 打開目錄4.2 readdir() 讀取目錄內容4.3 closedir() 關閉目錄 5. dirent 結構體6.…

Spring 依賴注入詳解:創建 Bean 和注入依賴是一回事嗎?

1. 什么是依賴注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;&#xff1f; 依賴注入 是 Spring IoC&#xff08;控制反轉&#xff09;容器的核心功能。它的目標是將對象的依賴&#xff08;如其他對象或配置&#xff09;從對象本身中剝離&#xff0c;由容器負…

AI時代的網絡安全:傳統技術的落寞與新機遇

AI時代的網絡安全&#xff1a;傳統技術的落寞與新機遇 在AI技術飛速發展的浪潮中&#xff0c;網絡安全領域正經歷著前所未有的變革。一方面&#xff0c;傳統網絡安全技術在面對新型攻擊手段時逐漸顯露出局限性&#xff1b;另一方面&#xff0c;AI為網絡安全帶來了新的機遇&…

后端開發Web

Maven Maven是apache旗下的一個開源項目&#xff0c;是一款用于管理和構建java項目的工具 Maven的作用 依賴管理 方便快捷的管理項目依賴的資源&#xff08;jar包&#xff09;&#xff0c;避免版本沖突問題 統一項目結構 提供標準、統一的項目結構 項目構建 標準跨平臺(…

前沿技術趨勢洞察:2024年技術的嶄新篇章與未來走向!

引言 時光飛逝&#xff0c;2024年已經來臨&#xff0c;回顧過去一年&#xff0c;科技的迅猛進步簡直讓人目不暇接。 在人工智能&#xff08;AI&#xff09;越來越強大的今天&#xff0c;我們不再停留在幻想階段&#xff0c;量子計算的雛形開始展示它的無窮潛力&#xff0c;Web …

【10.2】隊列-設計循環隊列

一、題目 設計你的循環隊列實現。 循環隊列是一種線性數據結構&#xff0c;其操作表現基于 FIFO&#xff08;先進先出&#xff09;原則并且隊尾被連接在隊首之后以形成一個循環。它也被稱為“環形緩沖器”。 循環隊列的一個好處是我們可以利用這個隊列之前用過的空間。在一個普…

博客之星2024年度總評選——我的年度創作回顧與總結

2024年&#xff0c;是我在CSDN博客上持續耕耘、不斷成長的一年。在此&#xff0c;與大家分享一下我的年度創作回顧與總結。 一、創作成長與突破 在人工智能領域&#xff0c;技術迭代迅速&#xff0c;知識更新頻繁。為了保持自己的競爭力&#xff0c;在今年&#xff0c;我始終…

IDEA運行Java項目總會報程序包xxx不存在

我的在另外一臺電腦上跑是沒有問題的&#xff0c;在新的電腦上跑的時候&#xff0c;又出現了這個惡心的問題...... 思來想去&#xff0c;唯一的問題就是我的mavn環境沒的配置好 如何在本地部署mavn環境&#xff0c;這里推薦一篇很好的文章&#xff1a; Maven安裝與配置&…

java 根據前端傳回的png圖片數組,后端加水印加密碼生成pdf,返回給前端

前端傳回的png圖片數組&#xff0c;后端加水印加密碼生成pdf&#xff0c;返回給前端 場景&#xff1a;重點&#xff1a;maven依賴controllerservice 場景&#xff1a; 當前需求&#xff0c;前端通過html2canvas將頁面報表生成圖片下載&#xff0c;可以仍然不滿意。 需要java后…

數據分庫分表和遷移方案

在我們業務快速發展的過程中&#xff0c;數據量必然也會迎來突飛猛漲。那么當我們的數據量百倍、千倍、萬倍、億倍增長后&#xff0c;原有的單表性能就不能滿足我們日常的查詢和寫入了&#xff0c;此時數據架構就不得不進行拆分&#xff0c;比如單表拆分成10張表、100張表、單個…

線上突發:MySQL 自增 ID 用完,怎么辦?

線上突發&#xff1a;MySQL 自增 ID 用完&#xff0c;怎么辦&#xff1f; 1. 問題背景2. 場景復現3. 自增id用完怎么辦&#xff1f;4. 總結 1. 問題背景 最近&#xff0c;我們在數據庫巡檢的時候發現了一個問題&#xff1a;線上的地址表自增主鍵用的是int類型。隨著業務越做越…

[Java] Solon 框架的三大核心組件之一插件擴展體系

1、Solon 的三大核心組件 核心組件說明Plugin 插件擴展機制提供“編碼風格”的擴展體系Ioc/Aop 應用容器提供基于注入依賴的自動裝配體系ContextHandler 通用上下文處理接口提供“開放式處理”適配體系&#xff08;俗稱&#xff0c;三元合一&#xff09; 2、Solon Plugin 插件…

TRELLIS微軟的圖生3D

TRELLIS 教程目錄&#xff1a; Youtube&#xff1a;https://www.youtube.com/watch?vJqFHZ-dRMhI 官網地址&#xff1a;https://trellis3d.github.io/ GitHub&#xff1a;https://github.com/Microsoft/TRELLIS 部署目錄&#xff1a; 克隆項目 git clone --recurse-submodul…

Java導出通過Word模板導出docx文件并通過QQ郵箱發送

一、創建Word模板 {{company}}{{Date}}服務器運行情況報告一、服務器&#xff1a;總告警次數&#xff1a;{{ServerTotal}} 服務器IP:{{IPA}}&#xff0c;總共告警次數:{{ServerATotal}} 服務器IP:{{IPB}}&#xff0c;總共告警次數:{{ServerBTotal}} 服務器IP:{{IPC}}&#x…

【22】Word:小李-高新技術企業政策?

目錄 題目? NO1.2 NO3 NO4 NO5.6 NO7.8 NO9.10 若文章中存在刪除空白行等要求&#xff0c;可以到最后來完成。注意最后一定要檢查此部分&#xff01;注意&#xff1a;大多是和事例一樣即可&#xff0c;不用一摸一樣&#xff0c;但也不要差太多。 題目 NO1.2 F12Fn&a…

自動化部署(三):項目管理平臺

一、項目管理平臺作用 幫助團隊高效規劃、執行和監控項目進度&#xff0c;確保任務按時完成并實現目標 敏捷開發&#xff1a;提供標準敏捷研發管理&#xff0c;支持Scrum 與 Kanban 規模化敏捷&#xff1a;支持大型研發團隊跨項目協同&#xff0c;實現多項目路線圖規劃和資源管…

常用集合-數據結構-MySql

目錄 java核心&#xff1a; 常用集合與數據結構: 單例集合: 雙列集合: 線程安全的集合: ConcurrentHashMap集合: HashTable集合: CopyOnWriteArrayList集合: CopyOnWriteArraySet集合: ConcurrentLinkedQueue隊列: ConcurrentSkipListMap和ConcurrentSkipListSet&…

IP屬地與視頻定位位置不一致:現象解析與影響探討

在數字化時代&#xff0c;IP屬地和視頻定位位置已成為我們獲取網絡信息、判斷內容真實性的重要依據。然而&#xff0c;有時我們會發現&#xff0c;某些視頻內容中展示的定位位置與其發布者的IP屬地并不一致。這種不一致現象引發了廣泛的關注和討論。本文旨在深入剖析IP屬地與視…