巧用數論與動態規劃破解包子湊數問題

本文針對“包子湊數”問題,深入解析如何通過最大公約數(GCD)判斷無法組成的數目是否無限,并結合動態規劃高效求解有限情況下的具體數目。通過清晰的算法思路、代碼實現及示例詳解,揭秘數論與動態規劃在組合問題中的巧妙應用,幫助讀者掌握核心解題技巧。文章還包含復雜度分析與關鍵注意事項,適合算法學習者和編程愛好者閱讀。

題目描述

小明想知道包子鋪用給定的蒸籠規格能湊出多少種無法組成的包子數目。若無法組成的數目無限,輸出 INF

輸入格式

  • 第一行為整數 N N N(蒸籠種數)
  • 接下來 N N N 行每行一個整數 A i A_i Ai?(每種蒸籠的包子數)

輸出格式

  • 無法湊出的數目個數,若無限則輸出 INF

問題分析

關鍵條件

若所有 A i A_i Ai? 的最大公約數(GCD)不為 1,則無法組成的數目無限。例如,當所有數均為偶數時,無法組成任何奇數。

動態規劃思路

當 GCD 為 1 時,使用動態規劃判斷每個數是否能被組成:

  • 定義 dp[i] 表示能否湊出 i 個包子。
  • 狀態轉移:若存在某個 A j A_j Aj? 使得 dp[i - A_j] 為真,則 dp[i] 為真。

解題步驟

  1. 計算 GCD:若 GCD ≠ 1,直接輸出 INF
  2. 動態規劃求解:遍歷 1 到 100000,統計無法組成的數目。

代碼實現

#include<iostream>
#include<algorithm>
using namespace std;int N;
int num[110];
bool dp[100010];  // dp[i]表示能否組成i個包子// 計算最大公約數
int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
}int main() {cin >> N;int g = 0;  // 初始GCD為0for (int i = 1; i <= N; ++i) {cin >> num[i];g = gcd(g, num[i]);  // 更新GCD}// 若所有數的GCD不為1,輸出INFif (g != 1) {cout << "INF" << endl;return 0;}dp[0] = true;  // 0個包子可以湊出// 動態規劃填充數組for (int i = 1; i <= 100000; ++i) {for (int j = 1; j <= N; ++j) {if (i >= num[j] && dp[i - num[j]]) {dp[i] = true;  // 標記當前數目可湊}}}// 統計無法湊出的數目int res = 0;for (int i = 1; i <= 100000; ++i) {if (!dp[i]) ++res;}cout << res << endl;return 0;
}

復雜度分析

  • 時間復雜度 O ( N × M ) O(N \times M) O(N×M),其中 M = 1 0 5 M=10^5 M=105 為遍歷的最大數, N N N 為蒸籠種數。
  • 空間復雜度 O ( M ) O(M) O(M),存儲動態規劃狀態。

示例解釋

樣例輸入1

2  
4  
5

輸出:6
解釋:無法湊出的數為 1, 2, 3, 6, 7, 11。

樣例輸入2

2  
4  
6

輸出:INF
解釋:所有奇數無法湊出,數目無限。

總結

本題結合數論(GCD判斷)與動態規劃,需注意:

  1. 先通過 GCD 判斷是否為無限情況。
  2. 動態規劃時需覆蓋足夠大的范圍以確保正確性。

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

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

相關文章

什么是數據

一、數據的本質定義?? ??哲學視角?? 亞里士多德《形而上學》中"未加工的觀察記錄"現代認知科學&#xff1a;人類感知系統接收的原始刺激信號&#xff08;如視網膜光信號、聽覺神經電信號&#xff09;信息論奠基人香農&#xff1a;消除不確定性的度量載體 ??…

FreeRTOS中互斥量實現數據共享優化

在 FreeRTOS 中&#xff0c;當讀操作遠多于寫操作時&#xff0c;使用**互斥量&#xff08;Mutex&#xff09;會導致讀任務頻繁阻塞&#xff0c;降低系統性能。此時&#xff0c;可以通過實現讀者-寫者鎖&#xff08;Reader-Writer Lock&#xff09;**優化&#xff0c;允許多個讀…

國內虛擬電廠(VPP)管控平臺供應商

以下是幾家專注于虛擬電廠業務的供應商及其官網地址&#xff1a; 1. 華茂能聯科技有限公司 官網地址&#xff1a;https://huamod.com/簡介&#xff1a;華茂能聯是分布式資源管理與虛擬電廠產品與服務提供商&#xff0c;團隊匯聚了來自美國、歐洲和國內多個行業知名研究機構或…

協方差相關問題

為什么無偏估計用 ( n ? 1 ) (n-1) (n?1) 而不是 n n n&#xff0c;區別是什么&#xff1f; 在統計學中&#xff0c;無偏估計是指估計量的期望值等于總體參數的真實值。當我們用樣本數據估計總體方差或協方差時&#xff0c;分母使用 ( n ? 1 ) (n-1) (n?1) 而不是 n n…

算法設計學習6

實驗目的及要求&#xff1a; 目標是使學生學會分析數據對象的特點&#xff0c;掌握數據組織的方法和在計算機中的存儲方式&#xff0c;能夠對具體問題中所涉及的數據選擇合適的邏輯結構、存儲結構&#xff0c;進而在此基礎上&#xff0c;對各種具體操作設計高效的算法&#xff…

Java 三大特性—多態

目錄 1、多態的概念2、多態的條件3、向上轉型3.1 概念3.2 使用場景 4、向下轉型5、多態的優缺點 1、多態的概念 多態&#xff0c;通俗來講就是多種形態&#xff0c;即對于同樣的行為&#xff0c;不同的對象去完成會產生不同的狀態。比如動物都會吃東西&#xff0c;小狗和小貓都…

Ubuntu 24.04 LTS系統安裝RTX 4090顯卡驅動和cuda并部署ollama下載DeepSeek模型【自用詳細版】

自己搗鼓玩玩哈&#xff0c;正好有機子 1. 安裝驅動前的系統配置工作 卸載原有驅動并禁用nouveau sudo apt remove --purge nvidia*sudo cp /etc/modprobe.d/blacklist.conf /etc/modprobe.d/blacklist.conf.backup //備份文件sudo vim /etc/modprobe.d/blacklist.conf //修…

【一篇搞定配置】一篇帶你從配置到使用(PyCharm遠程)完成服務器運行項目(配置、使用一條龍)【全網最詳細版】

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;各種軟件安裝與配置_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1.…

Mamba模型

為什么要提出mamba模型&#xff1f; transformer特點&#xff1a;訓練快&#xff0c;推理慢&#xff0c;計算成本O&#xff08;n*n&#xff09; Rnn的特點&#xff1a;訓練慢&#xff0c;推理快&#xff0c;容易遺忘 其實很容易理解&#xff0c;因為RNN的輸入只包含前一個隱…

如何在 Windows 11 上查找計算機的 IP 地址?

原文&#xff1a;如何在 Windows 11 上查找計算機的 IP 地址&#xff1f; | w3cschool筆記 在開始之前&#xff0c;我們先來了解一下什么是 IP 地址&#xff1a; 假設你住在一棟公寓樓里&#xff0c;快遞員需要把包裹送到你家。為了確保快遞能準確送到&#xff0c;你需要提供…

2.Spring-注解開發定義bean/純注解開發/Spring整合MyBatis(p21-p30)

&#xff08;一&#xff09;注解開發定義bean &#xff08;二&#xff09;純注解開發 &#xff08;三&#xff09;bean的作用范圍 &#xff08;三&#xff09;xml配置和注解配置 &#xff08;四&#xff09;Spring整合MyBatis 要在pom.xml定義一下坐標。org.spr…

解決:Fontconfig head is null, check your fonts or fonts configurat

文章目錄 問題解決方案安裝字體依賴包強制刷新字體緩存驗證是否生效 個人簡介 問題 在使用 Java 環境部署或運行圖形相關應用時&#xff0c;比如圖片驗證碼&#xff0c;偶爾會遇到如下報錯&#xff1a; Fontconfig head is null, check your fonts or fonts configurat意味當…

『不廢話』之Llama 4實測小報

2025年4月5日Llama 4一開源&#xff0c;隨后OpenRouter等平臺就提供免費調用。對于中文社區來&#xff0c;官方的測評結果其實意義不大&#xff08;原因先按下不表&#xff09;&#xff0c;就看知乎、微博、B站、twitter上的真實感受&#xff0c;最重要的是自己的真實案例測評。…

【NLP 56、實踐 ? LoRA完成NER任務】

目錄 一、數據文件 二、模型配置文件 config.py 三、數據加載文件 loader.py 1.導入文件和類的定義 2.初始化 3.數據加載方法 代碼運行流程 4.文本編碼 / 解碼方法    ① encode_sentence()&#xff1a; ② decode()&#xff1a; 代碼運行流程 ③ padding()&#xff1a; 代碼…

八大排序——c++版

本次排序都是按照升序排的 冒泡排序 void bubbleSort(vector<int>& nums) {int nnums.size();for(int i0;i<n-1;i){bool swappedfalse;for(int j0;j<n-1-i;j){if(nums[j]>nums[j1]){swap(nums[j],nums[j1]);swappedtrue;}}if(!swapped)break;} } //算法原…

mlir-tblgen 的應用漸進式示例

示例01 -gen-dialect-decls toy_dia.1.toy include "mlir/IR/OpBase.td" //include "mlir/IR/FunctionInterfaces.td" //include "mlir/IR/SymbolInterfaces.td" //include "mlir/Interfaces/SideEffectInterfaces.td"def Toy_Diale…

Go語言從零構建SQL數據庫(5)-Pratt解析算法:SQL表達式解析的核心引擎

Pratt解析算法&#xff1a;SQL表達式解析的核心引擎 1. 算法概述與工作原理 Pratt解析算法&#xff08;自頂向下運算符優先級解析&#xff09;是一種優雅的表達式解析方法&#xff0c;特別適合處理具有不同優先級運算符的復雜表達式。在我們的SQL解析器中&#xff0c;它負責解…

spring-ai-openai調用Xinference1.4.1報錯

1、Xinference 報錯logs 此處是調用 /v1/chat/completions 接口 2025-04-06 15:48:51 xinference | return await dependant.call(**values) 2025-04-06 15:48:51 xinference | File "/usr/local/lib/python3.10/dist-packages/xinference/api/restful_api.py", …

刻意練習:如何從新手到大師

1. 練習方式 練習主要有兩類&#xff1a;天真的練習和刻意練習。 所謂“天真的練習”&#xff0c;基本上只是反復地做某些事情&#xff0c;并指望只靠那種反復&#xff0c;就能提高表現和水平。一旦某個人的表現達到了“可接受”的水平&#xff0c;并且可以做到自動化&#x…

基于Java的人臉識別在線考試系統(jsp+springboot+mysql8.x)

基于Java的人臉識別在線考試系統(jspspringbootmysql8.x) 在線考試系統提供全面的考試管理和用戶管理功能。登錄界面支持管理員、教師和學生三種身份驗證&#xff0c;確保不同用戶訪問相應的功能模塊。系統自動組卷功能允許管理員根據不同科目和題型&#xff0c;如單選題、多選…