【藍橋杯】包子湊數

包子湊數

題目描述

小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有?NN?種蒸籠,其中第?ii?種蒸籠恰好能放?AiAi??個包子。每種蒸籠都有非常多籠,可以認為是無限籠。

每當有顧客想買?XX?個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有?XX?個包子。比如一共有 3 種蒸籠,分別能放 3、4 和 5 個包子。當顧客想買 11 個包子時,大叔就會選 2 籠 3 個的再加 1 籠 5 個的(也可能選出 1 籠 3 個的再加 2 籠 4 個的)。

當然有時包子大叔無論如何也湊不出顧客想買的數量。比如一共有 3 種蒸籠,分別能放 4、5 和 6 個包子。而顧客想買 7 個包子時,大叔就湊不出來了。

小明想知道一共有多少種數目是包子大叔湊不出來的。

輸入描述

第一行包含一個整數?NN?(1≤N≤1001≤N≤100)。

以下 N 行每行包含一個整數?AiAi??(1≤Ai≤1001≤Ai?≤100)。

輸出描述

一個整數代表答案。如果湊不出的數目有無限多個,輸出 INF。

輸入輸出樣例

示例 1

輸入

2
4
5

輸出

6

樣例說明

湊不出的數目包括:1, 2, 3, 6, 7, 11。

示例 2

輸入

2
4
6

輸出

INF

樣例說明

所有奇數都湊不出來,所以有無限多個

運行限制

  • 最大運行時間:1s
  • 最大運行內存: 256M

總通過次數: 8165??|??總提交次數: 9840??|??通過率: 83%

難度: 困難???標簽: 2017, 裴蜀定理, 省賽, 動態規劃

問題分析:包子湊數(裴蜀定理 + 動態規劃)

核心算法思路
  1. ??裴蜀定理應用??:

    • 若所有蒸籠容量?Ai??的最大公約數?g=1,則存在無限多個無法湊出的數(輸出?INF
    • 若?g=1,則無法湊出的數是有限的(需動態規劃統計)。
  2. ??動態規劃(完全背包)??:

    • ??狀態定義??:dp[j] = true?表示能湊出?j?個包子。
    • ??初始化??:dp[0] = true(0 個包子不需要任何蒸籠)
    • ??狀態轉移??:

      for (每種蒸籠容量 a[i]) for (j = a[i]; j <= MAX; j++) dp[j] = dp[j] || dp[j - a[i]];

    • ??統計結果??:遍歷?dp[1..MAX],計數?dp[j] = false?的數量
算法步驟
  1. ??計算最大公約數??:

    • 初始化?g=A0?,遍歷?g=gcd(g,Ai?)。
    • 若?g=1,輸出?INF?并結束。
  2. ??動態規劃求解??:

    • 設背包容量?MAX = 10000(因?Ai?≤100,最大不可湊數?<1002)
    • 對每種蒸籠容量更新?dp?數組。
  3. ??統計無法湊出的數量??:

    • 遍歷?dp[1..MAX],統計?false?的個數。

C++ 代碼實現

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;// 計算最大公約數
int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
}int main() {const int MAX = 10000;  // 背包最大容量int n;cin >> n;vector<int> a(n);vector<bool> dp(MAX + 1, false);  // dp數組初始化// 輸入并計算最大公約數int g = 0;for (int i = 0; i < n; i++) {cin >> a[i];g = (i == 0) ? a[i] : gcd(g, a[i]);}// 檢查最大公約數if (g != 1) {cout << "INF" << endl;return 0;}// 動態規劃(完全背包)dp[0] = true;  // 初始化:0個包子可湊出for (int i = 0; i < n; i++) {for (int j = a[i]; j <= MAX; j++) {if (dp[j - a[i]]) dp[j] = true;  // 狀態轉移}}// 統計無法湊出的數量int count = 0;for (int i = 1; i <= MAX; i++) {if (!dp[i]) count++;}cout << count << endl;return 0;
}

代碼解析

  1. ??最大公約數計算??:

    • 使用遞歸實現輾轉相除法,時間復雜度?O(log(min(Ai?)))
  2. ??動態規劃核心??:

    • ??空間優化??:使用一維?dp?數組,避免二維空間開銷
    • ??完全背包邏輯??:每種蒸籠無限使用,內層循環正序更新(區別于01背包的逆序)
  3. ??邊界與效率??:

    • ??背包容量??:MAX=10000?的設定基于裴蜀定理(Ai?≤100?時最大不可湊數?<1002)
    • ??時間復雜度??:O(N×MAX),滿足?N≤100、MAX=104,1秒內可完成

示例驗證

  • ??輸入?[4, 5]??:
    • g=gcd(4,5)=1,動態規劃后統計得無法湊出?{1,2,3,6,7,11},輸出?6
  • ??輸入?[4, 6]??:
    • g=gcd(4,6)=2=1,直接輸出?INF

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

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

相關文章

pikachu通關教程-目錄遍歷漏洞(../../)

目錄遍歷漏洞也可以叫做信息泄露漏洞、非授權文件包含漏洞等. 原理:目錄遍歷漏洞的原理比較簡單&#xff0c;就是程序在實現上沒有充分過濾用戶輸入的../之類的目錄跳轉符&#xff0c;導致惡意用戶可以通過提交目錄跳轉來遍歷服務器上的任意文件。 這里的目錄跳轉符可以是../…

[概率論基本概念4]什么是無偏估計

關鍵詞&#xff1a;Unbiased Estimation 一、說明 對于無偏和有偏估計&#xff0c;需要了解其敘事背景&#xff0c;是指整體和抽樣的關系&#xff0c;也就是說整體的敘事是從理論角度的&#xff0c;而估計器原理是從實踐角度說事&#xff1b;為了表明概率理論&#xff08;不可…

面試題——計算機網絡:HTTP和HTTPS的區別?

HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff1a;作為互聯網上應用最廣泛的網絡通信協議&#xff0c;HTTP是基于TCP/IP協議族的應用層協議。它采用標準的請求-響應模式進行通信&#xff0c;通過簡潔的報文格式&#xff08;包含請求行、請求頭、請求體等&a…

uni-app學習筆記十九--pages.json全局樣式globalStyle設置

pages.json 頁面路由 pages.json 文件用來對 uni-app 進行全局配置&#xff0c;決定頁面文件的路徑、窗口樣式、原生的導航欄、底部的原生tabbar 等。 導航欄高度為 44px (不含狀態欄)&#xff0c;tabBar 高度為 50px (不含安全區)。 它類似微信小程序中app.json的頁面管理部…

SQL思路解析:窗口滑動的應用

目錄 &#x1f3af; 問題目標 第一步&#xff1a;從數據中我們能直接得到什么&#xff1f; 第二步&#xff1a;我們想要的“7天窗口”長什么樣&#xff1f; 第三步&#xff1a;SQL 怎么表達“某一天的前六天”&#xff1f; &#x1f50d;JOIN 比窗口函數更靈活 第四步&am…

解決MyBatis參數綁定中參數名不一致導致的錯誤問題

前言 作為一名Java開發者&#xff0c;我在實際項目中曾多次遇到MyBatis參數綁定的問題。其中最常見的一種情況是&#xff1a;在Mapper接口中定義的參數名與XML映射文件中的占位符名稱不一致&#xff0c;導致運行時拋出Parameter xxx not found類異常。這類問題看似簡單&#x…

黑馬程序員TypeScript課程筆記—類型兼容性篇

類型兼容性的說明 因為傳入的時候只有一個參數 對象之間的類型兼容性 接口之間的類型兼容性 函數之間的類型兼容性&#xff08;函數參數個數&#xff09; 和對象的兼容性正好相反 函數之間的類型兼容性&#xff08;函數參數類型&#xff09; 函數參數的兼容性就不要從接口角度…

智能電視的操作系統可能具備哪些優勢

豐富的應用資源&#xff1a; 操作系統內置了應用商店&#xff0c;提供了豐富的應用資源&#xff0c;涵蓋視頻、游戲、教育等多個領域&#xff0c;滿足不同用戶的多樣化需求。用戶可以輕松下載并安裝所需的應用&#xff0c;享受更多元化的娛樂和學習體驗。 流暢的操作體驗&…

Xget 正式發布:您的高性能、安全下載加速工具!

您可以通過 star 我固定的 GitHub 存儲庫來支持我&#xff0c;謝謝&#xff01;以下是我的一些 GitHub 存儲庫&#xff0c;很有可能對您有用&#xff1a; tzst Xget Prompt Library 原文 URL&#xff1a;https://blog.xi-xu.me/2025/06/02/xget-launch-high-performance-sec…

精美的軟件下載頁面HTML源碼:現代UI與動畫效果的完美結合

精美的軟件下載頁面HTML源碼&#xff1a;現代UI與動畫效果的完美結合 在數字化產品推廣中&#xff0c;一個設計精良的下載頁面不僅能提升品牌專業度&#xff0c;還能顯著提高用戶轉化率。本文介紹的精美軟件下載頁面HTML源碼&#xff0c;通過現代化UI設計與豐富的動畫效果&…

麒麟v10+信創x86處理器離線搭建k8s集群完整過程

前言 最近為某客戶搭建內網的信創環境下的x8s集群&#xff0c;走了一些彎路&#xff0c;客戶提供的環境完全與互聯網分離&#xff0c;通過yum、apt這些直接拉依賴就別想了&#xff0c;用的操作系統和cpu都是國產版本&#xff0c;好在仍然是x86的&#xff0c;不是其他架構&…

Pycharm的使用技巧總結

目錄 一、高效便捷的快捷鍵 二、界面漢化處理 1.設置 2.插件 3.漢化插件安裝 三、修改字體大小、顏色 1.選擇文件-設置 2.選擇編輯器-配色方案-python 3.修改注釋行顏色 4.修改編輯器字體顏色 一、高效便捷的快捷鍵 序號快捷鍵功能場景效果1Ctrl /快速注釋/取消注釋…

安全編碼規范與標準:對比與分析及應用案例

在軟件開發領域&#xff0c;尤其是涉及安全關鍵系統的開發中&#xff0c;遵循編碼規范和標準是確保軟件質量和安全性的重要手段。除了CERT C、CERT Java和MISRA外&#xff0c;還有其他多個與安全相關的編碼規范和標準&#xff0c;以下是一些主要標準的對比說明&#xff1a; 一…

FFmpeg學習筆記

1. 播放器的架構 2. 播放器的渲染流程 3. ffmpeg下載與安裝 3.0 查看PC是否已經安裝了ffmpeg ffmpeg 3.1 下載 wget https://ffmpeg.org/releases/ffmpeg-7.0.tar.gz 3.2 解壓 tar zxvf ffmpeg-7.0.tar.gz && cd ./ffmpeg-7.0 3.3 查看配置文件 ./configure …

大寬帶怎么做

我有10個G的寬帶資源&#xff0c;怎樣運行P2P才能將收益巨大化&#xff0c;主要有以下幾種方式&#xff1a; 1.多設備匯聚模式&#xff1a;使用多臺支持千兆網絡的服務器或專用PCDN設備&#xff08;如N1盒子&#xff09;&#xff0c;將10條寬帶分別接入不同設備&#xff0c;通過…

pytorch基本運算-導數和f-string

引言 在前序對機器學習的探究過程中&#xff0c;我們已經深刻體會到人工智能到處都有微分求導運算&#xff0c;相關文章鏈接包括且不限于&#xff1a; BP神經網絡 邏輯回歸 對于pytorch張量&#xff0c;求導運算必不可少&#xff0c;所以本次就專門來學習一下。 f-string的用…

dvwa4——File Inclusion

LOW: 先隨便點開一個文件&#xff0c;可以觀察到url欄變成這樣&#xff0c;說明?page是dvwa當前關卡用來加載文件的參數 http://10.24.8.35/DVWA/vulnerabilities/fi/?pagefile1.php 我們查看源碼 &#xff0c;沒有什么過濾&#xff0c;直接嘗試訪問其他文件 在url欄的pag…

經典面試題:一文了解常見的緩存問題

在面試過程中&#xff0c;面試官的桌子上擺放著很多高頻的面試題&#xff0c;能否順利回答決定了你面試通過的概率。其中緩存問題就是其中的一份&#xff0c;可以說掌握緩存問題及解決方法是面試前必須準備的內容。那么緩存有什么典型的問題&#xff0c;出現的原因是什么&#…

生產環境中安裝和配置 Nginx 以部署 Flask 應用的詳細指南

在生產環境中部署 Flask 應用時&#xff0c;Nginx 常被用作反向代理服務器&#xff0c;與 WSGI 服務器&#xff08;如 Gunicorn&#xff09;協同工作。Nginx 可以處理靜態文件、提供 SSL/TLS 加密、實現負載均衡等功能。本文將詳細介紹如何在 Ubuntu/Debian 系統上安裝 Nginx&a…

鴻蒙進階——Mindspore Lite AI框架源碼解讀之模型加載詳解(一)

文章大綱 引言一、模型加載概述二、核心數據結構三、模型加載核心流程 引言 Mindspore 是一款華為開發開源的AI推理框架&#xff0c;而Mindspore Lite則是華為為了適配在移動終端設備上運行專門定制的版本&#xff0c;使得我們可以在OpenHarmony快速實現模型加載和推理等功能&…