NOI Online 1 入門組 文具訂購

2021-10-08 08:04:27 字數 1582 閱讀 3466

>description

小明的班上共有 n 元班費,同學們準備使用班費集體購買 3 種物品:

圓規,每個 7 元。

筆,每支 4 元。

筆記本,每本 3 元。

小明負責訂購文具,設圓規,筆,筆記本的訂購數量分別為 a,b,c,他訂購的原則依次如下:

n元錢必須正好用光,即 7a+4b+3c=n。

在滿足以上條件情況下,成套的數量盡可能大,即 a,b,c 中的最小值盡可能大。

在滿足以上條件情況下,物品的總數盡可能大,即 a+b+c 盡可能大。

請你幫助小明求出滿足條件的最優方案。可以證明若存在方案,則最優方案唯一。

>input

輸入僅一行乙個整數,代表班費數量 n。

>output

如果問題無解,請輸出−1。

否則輸出一行三個用空格隔開的整數 a, b, c,分別代表圓規、筆、筆記本的個數。

>sample input

33>sample output

1 2 6

對於測試點 1∼6,保證 n≤14。

對於測試點 7∼12,保證 n 是 14 的倍數。

對於測試點 13∼18,保證 n≤100。

對於全部的測試點,保證 0≤n≤10^5。

>解題思路

美好的一天從刷水開始

題目大意:沒有剩餘的錢 >> 最小值最大 >> 總數最大

由題意得,n元錢可以買到的最大成套數為 n/14(7+4+3),所以可以暴力從 n/14 到 0 開始列舉成套數,只要一符合條件就說明找到答案

因此此時只剩下兩個條件:n剛好花完,盡量讓總數最大

∵ 7=4+3

∴ 當剩下的文具已經不能配套時,讓7元的圓規換成4元的筆和3元的筆記本,增加文具總數

還有一些特殊情況需要處理(具體**):

當n=0時,輸出0 0 0

1+3=4%4=0,2+3+3=8%4=0

>**

#include 

#include

#include

using namespace std;

int n, t, a, b, c;

bool s;

int main()

for(int i = n /

14; i >=

0; i--

)//列舉配套數

else

if(t ==

2&& c - i >=2)

//特殊情況,首先考慮沒有剩餘的錢

if(t !=0)

continue

;printf

("%d %d %d"

, a, b, c)

; s =1;

break;}

if(!s)printf

("-1");

//注意這裡也要處理

return0;

}

NOI Online 1 入門組 魔法

全網都是矩陣快速冪,我只會倍增dp 其實這題與 acwing 345.牛站 還是比較像的,那題可以矩陣快速冪 倍增,這題也行。先 floyd 預處理兩點之間不用魔法最短距離 d 複雜度 o n 3 然後預處理兩點之間至多用乙個魔法的最短距離 w 初始為 w d 列舉 i,j 和一條邊 u,v,t w...

NOI Online 1 提高組 序列

luogu p6185 noi online 1 序列 將其轉化為圖論題。定義 u,v 為 a i 所代表的點 u v 為 b i 所代表的點 對於操作 2 將其視為一種權值搬運的操作,從 u 到 v 或者反過來轉移點權。那麼我們對 u,v 和 u v 連一條無向邊,顯然對於乙個連通塊內的所有點都可...

NOI Online 1 提高組 氣泡排序

這個題很繞,記數字i前面有cns i 個數字比他大,逆序對個數就是sigmi cns i 反轉k次就是讓cns i k i 1 i n 而且cns i 不能有負數 利用兩個線段樹維護一下,就是有點繞。include include include include includeusing names...