第九屆藍橋杯B組決賽 調手錶 完全揹包

2022-07-31 08:15:08 字數 1222 閱讀 7792

m78 星雲的乙個小時有 n 分鐘。

大家都知道,手錶只有乙個按鈕可以把當前的數加一。在調分鐘的時候,如果當前顯示的數是 0 ,那麼按一下按鈕就會變成 1,再按一次變成 2 。如果當前的數是 n - 1,按一次後會變成 0 。

作為強迫症患者,小明一定要把手錶的時間調對。如果手錶上的時間比當前時間多1,則要按 n - 1 次加一按鈕才能調回正確時間。

小明想,如果手錶可以再新增乙個按鈕,表示把當前的數加 k 該多好啊……

他想知道,如果有了這個 +k 按鈕,按照最優策略按鍵,從任意乙個分鐘數調到另外任意乙個分鐘數最多要按多少次。

注意,按 +k 按鈕時,如果加k後數字超過n-1,則會對n取模。

比如,n=10, k=6 的時候,假設當前時間是0,連按2次 +k 按鈕,則調為2。

「輸入格式」

一行兩個整數 n, k ,意義如題。

「輸出格式」

一行乙個整數

表示:按照最優策略按鍵,從乙個時間調到另乙個時間最多要按多少次。

「樣例輸入」

5 3「樣例輸出」

2「樣例解釋」

如果時間正確則按0次。否則要按的次數和操作系列之間的關係如下:

1:+1

2:+1, +1

3:+3

4:+3, +1

「資料範圍」

0 < k < n <= 100000題目求從任意數字a1變換成任意數字a2所需的最大操作次數,且變換遵循最優策略。我們根據樣例解釋把要求轉換一下。

①先求當前數字+m所需的最小次數,0 <= m < n,用陣列dp[ ]來記錄,很顯然,dp[ 0 ] = 0; dp[1] = 1

②題目就是要求我們輸出 max(dp)

第乙個步驟,我們可以用完全揹包的思想來做由於n的最大值為10* 10^5,因此要寫空間優化後的完全揹包演算法。

如果有不懂,可以參考這篇講解揹包問題及優化演算法的文章,鏈結。

#include #include 

#include #include #include #define inf 100000

using

namespace std;

int n, k;

int dp[100000 + 5];

int main();

int maxt = 0;

for(int i = 0;i <= 1; i++)

} for(int i = 0; i < n; i++)

cout}

第九屆藍橋杯B組決賽題解第四題 調手錶

調手錶 小明買了塊高階大氣上檔次的電子手錶,他正準備調時間呢。在 m78 星雲,時間的計量單位和地球上不同,m78 星雲的乙個小時有 n 分鐘。大家都知道,手錶只有乙個按鈕可以把當前的數加一。在調分鐘的時候,如果當前顯示的數是 0 那麼按一下按鈕就會變成 1,再按一次變成 2 如果當前的數是 n 1...

藍橋杯第九屆決賽

x星球的鈔票的面額只有 100元,5元,2元,1元,共4種。小明去x星旅遊,他手裡只有2張100元的x星幣,太不方便,恰好路過x星銀行就去換零錢。小明有點強迫症,他堅持要求200元換出的零鈔中2元的張數剛好是1元的張數的10倍,剩下的當然都是5元面額的。銀行的工作人員有點為難,你能幫助算出 在滿足小...

第九屆藍橋杯決賽大學A組

已知三角形三個頂點在直角座標系下的座標分別為 2.3,2.5 6.4,3.1 5.1,7.2 求該三角形的面積。注意,要提交的是乙個小數形式表示的浮點數。要求精確到小數後3位,如不足3位,需要補零。答案 include include using namespace std struct dian ...