包子湊數 完全揹包

2022-09-13 05:18:14 字數 1231 閱讀 9639

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

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

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

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

第一行包含乙個整數n。(1 <= n <= 100)

以下n行每行包含乙個整數ai。(1 <= ai <= 100)

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

例如,

輸入:

2 4

5

程式應該輸出:

6 再例如,

輸入:

2 4

6

程式應該輸出:

inf樣例解釋:

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

對於樣例2,所有奇數都湊不出來,所以有無限多個。

資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 1000ms

主要判斷何時為inf,有個定理。如果滿足所有數的最大公約數不為1則有無窮個,否則都是有限個。然後利用完全揹包就可以統計了。

#include

#define ll long long

#define inf 0x3f3f3f3f

#define pb push_back

#define rep(i,a,b) for(int i=a;i#define rep1(i,b,a) for(int i=b;i>=a;i--)

using

namespace

std;

const

int n=1e2+100;

int arr[n];

int gcd(int a,int b)

int main()

pp=arr[0];

rep(i,1,n)

if(pp!=1)

}rep(i,1,mx)

cout

0;}

蒸包子湊數 完全揹包 藍橋杯

include include include define maxn 10010 最多湊出的包子個數為100 100 using namespace std int n bool dp maxn 沒有初始化預設為假 int a 105 int pd int a,int b int main els...

1226 包子湊數

給出 n 個數 a i 求有多少個數不能通過這些數湊出 第一行包含乙個整數 n 接下來 n 行,每行包含乙個整數 a i 輸出乙個整數代表答案。如果湊不出的數目有無限多個,輸出inf。資料範圍 1 n 100,1 a i 100 輸入樣例1 2 45輸出樣例1 6輸入樣例2 2 46輸出樣例2 in...

LeetCode 279 完全平方數(完全揹包)

題意 給定正整數 n,找到若干個完全平方數 比如 1,4 9,16 使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。給你乙個整數 n 返回和為 n 的完全平方數的 最少數量 完全平方數 是乙個整數,其值等於另乙個整數的平方 換句話說,其值等於乙個整數自乘的積。例如,1 4 9 和 16 ...