題目描述
存在n個數,每次操作可以任選乙個區間使得區間內的所有數字減一。問最少多少次操作,可以讓所有數都變成1。
資料保證一定有解。
輸入描述:
輸入t,代表有t組資料。每組資料輸入n,代表有n個數。接下來一行輸入n個數,數字大小小於1e6。(t<=1000,n<1e5,∑n < 1e6)
輸出描述:
每組資料輸出乙個整數代表最少需要操作的次數。
示例1輸入16
1 3 5 2 7 1
輸出被卡了2小時,原來是搭積木問題。
用a[1]~a[n]存高度。
遍歷a[1]到a[n]。
若後列》前列,總次數增加差值。
否則,不用加(因前列搭積木到高度等於後列時可以把後列搭好了)。
第乙個點單獨處理,它前列是地面(本題地面高1,用a[0]=1初始化)。
**:
#include
#include
#include
#include
#include
#include
using namespace std;
int a[
100005];
int main()
}printf
("%d\n"
,sum);}
}return0;
}
題目描述
小明有一根長度為a的木棒,現在小明想將木棒分為多段(每段木棒長度必須為整數),
使得分隔後的木棍中,取出的任意三段都不能構成三角形,小明想知道木棒最多被分成幾段?
輸入描述:
輸入資料的第一行是t,表示資料的組數, 接下來每組資料輸入乙個a
(t<=1000, 1 <= a < 2^64 - 1)
輸出描述:
對於每組輸入樣例,列印木棒最多被分為多少段
示例1輸入13
輸出12用手寫寫思路就來了,為使分的小段最多,分段應從最小開始取 1 1 2 3 5 8…… 容易知道這是斐波那契數列求和問題。注意木棒長度1 <= a < 2^64 - 1,用unsigned long long 存資料
#include
#include
#include
#include
#include
using namespace std;
int main()
else
if(n==2)
else
sum=sum+b;
if(sum>n)
//超過木棒長
cnt++;}
} cout
}
第十屆藍橋杯(國賽) 求值
問題描述 學習了約數後,小明對於約數很好奇,他發現,給定乙個正整數 t,總是可以找到含有 t 個約數的整數。小明對於含有 t 個約數的最小數非常感興趣,並把它定義為 st 例如 s1 1,s2 2,s3 4,s4 6,現在小明想知道,當 t 100 時,st 是多少?即 s100 是多少?答案提交 ...
zzuli第十屆校賽
時間限制 1 sec 記憶體限制 256 mb 提交 211 解決 42 提交 狀態 討論版 命題人 admin 在麥克雷的面前有n個數,以及乙個r c的矩陣。現在他的任務是從n個數中取出 r c 個,並填入這個矩陣中。矩陣每一行的法值為本行最大值與最小值的差,而整個矩陣的法值為每一行的法值的最大值...
第十屆藍橋杯(國賽) 質數拆分
問題描述 2019可以被分解成若干個兩兩不同的素數,請問不同的分解方案有多少種?注意 分解方案不考慮順序,如 2 2017 2019 和 2017 2 2019 屬於同一種方案。答案 55965365465060 題解 01揹包 f i j 從前 i 個物品中選,且總體積恰好為 j 的方案的數量 i...