設每組資料有左哨兵a[0]=0,右哨兵a[n+1]=101。對陣列中兩個相鄰元素ai,ai+1的連續提交天數為ai+1-ai-1.
ai+1-ai為(ai,ai+1]區間上的整數個數,而-1是為去掉ai+1
例如1,2的連續提交天數顯然為0,而式子也滿足。
如何實現使用補題卡的表示呢?
對於m張補題卡,am+i+1與ai表示間隔m個元素的兩個元素,由於使用了m個補題卡,而每個元素代表漏簽的一天,補題卡代表補簽的一天,則間隔的所有元素都被補簽卡補簽了。故而這兩個元素的連續提交天數為am+i+1-ai-1.即(ai,ai+1+m)區間上的整數個數.
最長連續提交天數等價於求max(am+i+1-ai-1),即求補籤後相鄰兩個元素之間的整數個數的最大值。
遞迴基設為左哨兵a[0]=0,右哨兵a[n+1]=101。由於i列舉所有元素,導致am+i+1、ai不可避免遇到左右哨兵。a[0]=0表示第0天未提交題目,可作為a中任意元素作為第一次漏籤求連續提交天數的比較物件。而a[n+1]則相對a[0]而言沒有漏簽,用於求到第100天的連續提交天數。
而本題為了實現最長連續提交天數,採用貪心策略:直接用m張補題卡補連續的漏籤,求最優的結果。
注意到題目的樣例3突破掃瞄的邊界,問題在於補簽卡數量多於漏簽天數,必然是100天連續簽到。
#includeusing namespace std;
const int n=105;
int a[n];
int main()
int ma=0;
for(int i=0;i+m<=n;i++)//迴圈控制使a[0]、a[n+1]作為下限和上限都能訪問到
cout<} return 0;
}
hihoCoder 1051 補提交卡
時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 描述小ho給自己定了乙個巨集偉的目標 連續100天每天堅持在hihocoder上提交乙個程式。100天過去了,小ho檢視自己的提交記錄發現有n天因為貪玩忘記提交了。於是小ho軟磨硬泡 強忍著小hi鄙視的眼神從小hi那裡要來m張 ...
補提交卡 hihoCoder1051
題意 一百天裡有部分天沒有提交,現在有 m 張補交卡,問能夠產生的最長連續提交天數是多少。思路 要學會把實際的問題抽象出來,這樣方便自己思考。我們可以將這一百天看成一條線段,未提交的天把這條線段分成了若干條小的線段,現在要用補交卡去填上未提交的天,求出能夠得到的最長線段。例如,樣例輸入 34,77,...
HihoCoder1051 補提交卡
小趙給自己定了乙個巨集偉的目標 連續100天每天堅持在hihocoder上提交乙個程式。100天過去了,小趙檢視自己的提交記錄發現有n天因為貪玩忘記提交了。於是小趙軟磨硬泡 強忍著小郭鄙視的眼神從小郭那裡要來m張 補提交卡 每張 補提交卡 都可以補回一天的提交,將原本沒有提交程式的一天變成有提交程式...