**於寧波市程式設計競賽複賽(初中組)
n≤500,000,顯然對於這麼大的n,o(n^2)的解法都不夠。那麼考慮o(n)或者o(n*lg(n))的解法,動態規劃?貌似可行,但狀態怎麼表示?左對齊?右對齊?除此,要怎麼進行轉移呢,畢竟a和b的範圍也相當大,即便進行hash,最多也有500,000?
繼續分析發現,題目中指出,每一處對齊都只得1分,這說明在左右不可能同時對齊的情況下,左對齊和右對齊的收益是一樣的。那我們不妨讓所有小球都盡量左對齊好了,直到某一處不能左對齊便從後乙個開始繼續左對齊,反證法可以證明這樣能得到最大收益。
對齊實際上是保持高度相等,例如對於第一根繩子上的右小球,可以保持的高度範圍是[0,a1+b1],第二根繩子的左小球可以保持的高度範圍是[0,a2+b2]。
要是這兩個小球保持高度相等,那麼我們必須保證他們的高度在[0,min(a1+b1,a2+b2)]範圍內,相應地,第二根繩子的右小球變化範圍就必須是[a2+b2-min(a1+b1,a2+b2),a2+b2]…..依次類推,每兩個相鄰小球可以對齊便計1分,不能對齊便跳過,下乙個繼續對齊。
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=5e5+15;
int l[maxn], r[maxn];
bool ok(int s1,int t1,int s2,int t2)
int main()
else
// printf("%d %d %d\n",ans, mi, ma);
}printf("%d\n",ans);
return
0;}
31屆寧波市中小學生程式設計競賽複賽 初中組
於寧波市程式設計競賽複賽 初中組 n 5000,m n,顯然o n 3 的複雜度不能接受,那麼考慮o n 2 或者o n 2 lg n 的解法。最少需要消耗多少能量,看起來是乙個好像具有最優子結構的問題,那麼嘗試是否能用動態規劃來求解。仔細分析,可以發現最後乙隻猴子最優情況下肯定是爬上最後一棵樹,那...
30屆寧波市中小學生程式設計競賽複賽 初中組
於寧波市程式設計競賽複賽 初中組 單個班級內,最優排列方案的不整齊度 max ai min ai 2,即按高度進行排序,此時應當最優 感覺是個不等式證明?那麼排列方案的優劣與羊的具體數量無關,與各只羊的高度無關,至於最大高度與最小高度的差值有關。讓所有小羊按高度排列,此時可以將整個佇列看做一條線段,...
中小學生程式設計
近幾年以來,發布了多個推廣少兒程式設計教育的紅本政策,市面上也湧出了一大批少兒程式設計教育 機械人程式設計教育的機構。格物斯坦認為 大多數家長都不太名二者之間有什麼區別,很多家長感覺是機械人程式設計更高大上,但又不知道是不是這麼一回事。其實,少兒程式設計類產品,大體上分為兩類 純軟體類或軟硬體結合類...