鷹演算法
㈠ RQNOJ在線評測系統 T107 Ural的鷹蛋實驗 解題思路
第一想法二分,不過是錯的。
假設有i層j個蛋,在第k層做實驗丟下一個蛋,這個蛋有兩個狀態1)碎了2)沒碎。
1)當蛋碎了那我們就只需要找前k-1層,因為蛋碎了所以還有j-1個蛋
2)當蛋沒有碎那我們就只需要找後面的i-k層,因為蛋沒有碎所以還有j個蛋
因為是最壞情況,所以應該是兩種情況中最大的一個
我們就可以得到動態轉移方程了:
設f[i,j]表示有i層j個蛋做實驗的最壞情況的最小植
所以f[i,j] = min{max{f[k-1,j-1],f[i-k,j]}+1} (1<=k<=i)
但這個方程的時間復雜度是O(N3),對10003是肯定要超時的。前面說了二分得到的答案不是最優,不過在二分的過程中我們發現1000層最多也就10個蛋,所以但蛋的個數大於10的時候項當於只有10個蛋。所以蛋只當它有10個,所以現在的時間復雜度為O(1000*1000*10)就不會超時了。
《Ural的鷹蛋實驗》演算法說明
最容易想到的是二分貪心,但那是不對的。
應該用動規解:
舉個例子,10層樓,2個蛋,那麼就是要求a[10][2]
第一次試驗有10種選擇——1到10層
如果選第3層,最壞情況下當然E!=3,如果E<3,蛋就碎了(關鍵!),那麼還需要a[2][1]次
如果E>3,那麼還需要a[7][2]次,由於考慮最壞情況,取兩個的最大值,再加1
如果n層樓,m個蛋,其實就是
for(i=1;i<=n;i++) a[n][m]=min{1+max{a[i-1][m-1],a[n-i][m]}}
當然還要注意剪枝。
1000層樓,最多需要10個蛋
題目是URAl1223。
program ural1223;
const
maxn=1000;
maxn2=10;
var
min,max,n,k,l,i,j:integer;
a:array[0..maxn,0..maxn2]of integer;
r:real;
begin
assign(input,'c.in');
assign(output,'c.out');
reset(input);
rewrite(output);
for i:=1 to maxn do
begin
a[i,0]:=0;
a[i,1]:=i;
end;
for i:=1 to maxn2 do
begin
a[1,i]:=1;
a[0,i]:=0;
end;
for i:=2 to maxn2 do
for j:=2 to maxn do
begin
min:=maxint;
for k:=1 to j do
begin
if a[k-1,i-1]>a[j-k,i] then l:=a[k-1,i-1]
else l:=a[j-k,i];
if min>l then min:=l;
end;
a[j,i]:=min+1;
end;
read(n,k);
if n>10 then writeln(a[k,10])
else writeln(a[k,n]);
close(input);
close(output);
end.
㈡ 鷹瞳科技的演算法模型可以識別多少健康風險
目前,鷹瞳科技的演算法模型可以做到55種健康風險的識別,平均AUC達到0.968,達到人類專家水平。
㈢ 資金流向的兩種演算法
考察成交單的方向和大小來定義資金流向。根據滬深交易所提供的成交數據,如果單筆成交的成交價在現價之上,即主動性買盤,表明買方的意願更強烈,該筆成交定義為資金流入;如果單筆成交的成交價在現價之下,即主動性賣盤,表明賣方的意願更強烈,該筆成交定義為資金流出。另外一方面,根據單筆成交量的大小將主力資金和散戶資金加以區分,就可以很好的將機構資金的動向展示給投資者。
演算法說明
鷹眼大單-資金流向系統主要採用第二種演算法,將資金流向分為總資金流向和分類資金流向。其中,總資金流向反映多空雙方買賣意願,分類資金流向反映主力和散戶買賣意願。