某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度、並且能夠攔截任意速度的飛彈,但是以後每一發炮彈都不能高於前一發的高度,其攔截的飛彈的飛行速度也不能大於前一發。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。
在不能攔截所有的飛彈的情況下,我們當然要選擇使國家損失最小、也就是攔截飛彈的數量最多的方案。但是攔截飛彈數量的最多的方案有可能有多個,如果有多個最優方案,那麼我們會隨機選取乙個作為最終的攔截飛彈行動藍圖。
我方間諜已經獲取了所有敵軍飛彈的高度和速度,你的任務是計算出在執行上述決策時,每枚飛彈被攔截掉的概率。
正解:cdq+dp
這題顯然是乙個三維偏序,考慮cdq優化dp:
偏序為:\(ix[j],y[i]>y[j]\)
首先我們按正常cdq的套路分治 \(x\)
考慮 \(mid\) 左邊對右邊的影響
我們將 \(x\)按從大到小排序,按歸併排序的方法每一次將左邊的大於右邊當前 \(y\) 的加入,以 \(y\) 為下標建立樹狀陣列,那麼大於當前 \(y\) 的都是可以轉移到的,訪問樹狀陣列找出最大值即可
對於第二問:
\(i\) 被攔截的概率是 \(i\) 出現在的方案數目/方案總數,那麼我們在維護第一問最大值時,也要順便維護滿足最大值的方案數,如何判斷 \(i\) 是否在最優方案中?
我們正反各做一邊第一問的dp,答案分別為\(f1,f2\),如果\(f1+f2-1==ans\)即滿足條件,將 \(f1,f2\) 對應的方案相乘即可
注意:cdq分治優化dp時,分治順序要稍作調整,具體為:求出左邊答案,拿左邊更新完右邊後再分治右邊
tips:這題方案數是可以爆long long的,注意開double存方案
#include #include #include #include #include #include #define rg register
#define il inline
#define iter iterator
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const int n=50005;
int n,b[n],num=0,tot;
struct nodea[n];
bool compx(node i,node j)
bool compi(node i,node j)
else if(to==tr[i].x)tr[i].s+=fa;
}}il bit qry(int sta)
il void clear(int sta)
il void solve(int l,int r,bool t)
else
else if(tmp.x+1==f[t][j])g[t][j]+=tmp.s;}}
while(xr<=r)
else if(tmp.x+1==f[t][j])g[t][j]+=tmp.s;
}for(int i=l;i<=mid;i++)clear(tot-a[i].y+1);
sort(a+l,a+r+1,compi);
solve(mid+1,r,t);
}void work()
else if(ans==f[0][i])maxlen+=g[0][i];
}printf("%d\n",ans);
for(i=1;i<=n;i++)
}int main()
SDOI2011 BZOJ2244 攔截飛彈
description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度 並且能夠攔截任意速度的飛彈,但是以後每一發炮彈都不能高於前一發的高度,其攔截的飛彈的飛行速度也不能大於前一發。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還...
Bzoj2244 SDOI2011 攔截飛彈
傳送門 每個飛彈有時間,高度,速度 求時間遞增,高度,速度不降的最長的序列 然後還要求最長序列的方案以及每個飛彈在最長序列中的方案 這個就是偏序問題辣,正反兩遍求出每個飛彈為結尾開頭的序列最長長度 判斷是否在最長序列就二者相加判斷 然後記錄下方案,用do uble d ou bl e,lo nglo...
bzoj2244 SDOI2011 攔截飛彈
cdq。還真是。一開始自己寫,設f i 為以i結尾的最優方案,fn i 為以i結尾的最優方案數,然後cdq完了第一問就出來了,還順便把總最優方案數算了,and then?mengbier 然後各路 啊,乙個下午 一晚上就交代了 怎麼做呢?我們再cdq出另乙個f和fn表示以i開頭的最優方案和方案數 然...