翻煎餅 簡單模擬 C

2022-05-18 04:55:23 字數 866 閱讀 5996

一、題目描述(懶人可直接跳過看題目概述)

swust oj  題目0254

二、問題概述

給出一列數,每次可將包含首項的子串行翻轉,也就是說從開頭數若干個數字進行翻轉

翻轉操作具體如:1 2 3 4 5 → 5 4 3 2 1 ,直白來講就是倒過來念

要求用最少的翻轉次數後,使數列從小到大排列

三、問題分析

先找到最大的數,把它翻轉到第乙個,接著翻轉整個數列把它置於最後乙個,這樣完成一次操作

最大的數已經置於末尾,那麼之後的操作需要對它不造成影響,所以把數列數 -1,也就是丟下最後乙個數不管了

然後我們處理剩下的 n-1 個數列,即處理子問題

這裡容易出現乙個錯誤,如果最大的數為第乙個數,那麼就不需要進行第一次翻轉,此處需要特判一下

四、ac**

1 #include2 #include3 #include4 #include5 #include6 #include7

#define n 1001

8using

namespace

std;910

intn,ans,a[n];

11void change(int

x)12

20int

main()

2133

if (k!=n)

3438 n--;39}

40 printf("

%d\n

",ans);

41return0;

42 }

提交結果

翻煎餅 迭代加深搜尋 剪枝

這裡有道類似的 題目 使用迭代搜尋,最多只能跑過 n 7 n 7n 7 的資料,需要剪枝,每次旋轉相鄰數字之間的差值變化最微小,翻轉一次僅有一對數字間的差的絕對值會發生改變,於是統計有cnt cntcn t數字間絕對值不為 1 11,則至少需要 cnt cntcn t 次操作到終態,依此進行剪枝 沒...

題目標題 翻硬幣(模擬)

小明正在玩乙個 翻硬幣 的遊戲。桌上放著排成一排的若干硬幣。我們用 表示正面,用 o 表示反面 是小寫字母,不是零 比如,可能情形是 oo oooo 如果同時翻轉左邊的兩個硬幣,則變為 oooo oooo 現在小明的問題是 如果已知了初始狀態和要達到的目標狀態,每次只能同時翻轉相鄰的兩個硬幣,那麼對...

劉小白第乙個博文 演算法分析(翻煎餅)

輸入包括兩行,第一行是乙個整數n 1 n 1000 表示煎餅的個數,接下來的一行有n個不相同的整數,整數間用空格隔開,每個整數表示煎餅的大小 直徑 左邊表示頂部,右邊表示底部。輸出為一行,翻煎餅的最少次數 55 4 2 3 1 樣例輸出 4 include include include using...