ZROI117 17 普及 23 知足

2022-09-10 00:27:21 字數 1559 閱讀 5384

儘管這些題目都是***的經典歌曲,但和***毫無關係(好歹說一句:小明正在聽***的歌《知足》,突然心情很差,想出了一道機智的題,希望機(yu)智(chun)的你去切(bu cun zai de)了他。

你現在正在設計一套新的貨幣系統。這套貨幣系統有以下要求:

一共有 k

'>k

種面值的紙幣(沒有硬幣等其他貨幣)。

最小的紙幣面值為 1

'>1

元。每種紙幣的面值為前一種紙幣面值的 2

'>2

或 3'>3

或 4'>4

或 5'>5

倍。現在你希望設計這樣一套貨幣系統,使得湊出 n

'>n

元所需的紙幣數量盡量少(注意這裡不設找零,即你只能拿若干張紙幣加起來湊出 n

'>n

元)。你可以假設每種面值的紙幣都有任意多張。輸入一行兩個正整數 n

'>n

和 k'>k

,以乙個空格隔開。輸出乙個正整數,表示湊出 n

'>n

元至少需要的紙幣數量。

1025 6
2
紙幣面值:1

'>1

, 4'>4

, 16

'>16

, 64

'>64

, 256

'>256

, 1024

'>1024

。子任務1(20分):n≤10

18,k≤

10'>n

≤10^18,

k≤10子任務2(80分):n≤10

18,k≤

100'>n

≤10^18,

k≤100感覺智商越來越低了,,動態開點線段樹被做成單調佇列,nuo,普及組的題都只能敲暴力,orz orz

20分做法,爆搜。

滿分做法:dp[n,k]表示,還可以新有k種貨幣,將這k+1種貨幣構成n元錢的最小紙幣張數,並且第k+1的面額為1。

有個很顯然的貪心我們也在上述20分爆搜寫的時候發現,在一組貨幣後,我們一定是優先選金額大的再選金額小的。而這裡,我們列舉一下一張貨幣的面額(從2-->5)d,那麼一定是後面的貨幣分配了n-n%d元,這樣才更優。由於那n%d太小,只有面額1能選便分配。

這樣之後看似我們與之前定的面額矛盾,因為現在變成了k+1面額為d了。但實際上我們如果將(n-n%d)和面額d同時除上乙個d,那麼我們就又轉化為之前的dp狀態了。

那麼就有 dp[n,k] = for ( d 2-->5) min(dp[n,k],dp[(n-n%d)/d,k-1]+n%d)

這裡面有很多冗餘狀態,且顯然陣列存不下。我們開個hash表或者map都是可以的。

code:

#include#include#include#includeusing namespace std;

mapdp[105];

long long n,k;

long long dfs(long long n,long long k)

return dp[k][n] = bbest;

}int main()

中山DAy2 普及

今天挺不友好的,早上忘記定鬧鐘,晚了半小時起床,然後早上信心滿滿打算弄他個300分。結果 132.2分 wtf?題意 有n頭奶牛,k種細菌 k 15 給你每頭奶牛攜帶的細菌種類,問 若讓選出所有奶牛攜帶細菌少於d種,最多選幾頭奶牛?思路 上手就用了動歸,可能是昨天打積木那題,自己信心爆棚。然後 神奇...

嵊州普及Day2T2

題意 對於n個數的數列,進行排列,求第m個大於此數列的數列。思路 查詢後2個是否逆序,若是,將後3個遞迴。如此運算,找後面大於此數中最小數交換,然後將後面數列順序排列。相對簡單。見 include include include include include using namespace std...

JZOJ Day 2 普及模擬 串

題目描述 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。輸入乙個字串,只包含01,長度不超過1000000。輸出 一行乙個整數,最長的0與1的個數相等的子串的長度。樣例輸入 1011 樣例輸出 2 資料範圍限制 30 的資料 串的長度 20 程式 var s ansistr...