演算法模板
⑴ 模板超高工程量 演算法
是0.4*0.4*4.2 然後0.4*0.4*(4.2-3.6)另外再算。超高一米,兩米,三米...疊加的。不足0.5的不算,大於0.5米不足一米按超高一米計算。
⑵ 請高手幫我把下面的dijkstra演算法用C語言補充完整
加分,我給你全部的,正好有你這一部分在裡面,前幾天正好搞完這個!絕對好用!!!
⑶ ACM:參加過ACM的大牛是不是練習時都要把每個演算法敲幾十幾百次呢
ACM比賽可以帶紙質資料,准備一份模板是很有必要的,所以演算法模版很重要,記住模版一定要權威,不要網上雜七雜八的拿來當模版,一份好的模板一定會對你的編程習慣和演算法實現打下良好的基礎。但是,ACM比賽的等級越高,模版的作用就越小,畢竟比賽不是套模板。
沒有人會把每個演算法敲幾百遍,大牛更加不會,敲十遍還記不住的話,一百遍也沒用的,重要的是對演算法本身的理解。如果你真正理解了演算法但寫不出來,那是你編程水平問題,這樣應該多看看大牛的代碼,多看看模板。
大牛不是演算法模板敲的多,而是對演算法理解的深刻並加上做的題目多,演算法就像數學公式,你記住公式難道就能考高分了嗎。重要的是運用啊,一個數學高手對於新學的公式他可以隨時推導出來,因為對公式真正理解啊,推的多了自然記住了,不是嗎。對於新手,先不要學演算法,先去poj做水題,就是簡單的題目沒什麼演算法,水題不要做太多,100題就差不多了。接下來就該系統的學習一下演算法了,《演算法導論》和《演算法藝術與信息學競賽》是我覺得必看的兩本書。另外,歷屆NOI國家隊選手的論文也是很有價值的,也屬於必看。接下來繼續去poj做題,多思考,做不出來就網路,google,poj做題的人非常多。做題可以查漏補缺,之前沒碰到過的 演算法都可能在題目中體現,碰到沒學過的演算法就網路學習,然後選一個好的放到你的演算法模板庫,poj做題1000以上想不成大牛都難!
我只想說大牛基本上都是這么過來的,當然不排除個別天才,不過我沒碰到過也沒聽過誰不做大量的題就能成為牛人的,畢竟天道酬勤。
⑷ 函數模板的基本格式是什麼
1.函數模板主要用於具有相同的作用的函數,但是數據類型不一致。
函數模板實現了類型無關並且只在需要時自動實例化。
2.template <class T>
其中class關鍵字表明T是一個類型。
3.格式是一樣的,主要改變的是函數名、形式參數的個數、返回值類型與函數體的內容。
⑸ 墊層模板的計算方法是怎樣
是按墊層的接觸混凝土面的面積計算
⑹ 求KM演算法模板pascal源代碼 n3的復雜度
POJ2400(標准KM演算法)
題目大意:有n個管理員需要僱傭n個工作人員。 每個管理員對每個工作人員的評價不同,評價值(score)從0-n-1,0代表評價最高,n-1代表評價最低,同樣,每個工作人員對每個管理員也有不同 的評價,評價值也是從0-n-1,0代表評價值最高,n-1代表最低。問n個管理員怎樣選擇n個工作人員可以使的每個人的平均評價值最小。即總的評價值 /(2*n)最小。如果存在多種最佳方案,則按照字典序輸出每一種情況。
代碼:
program p2400;
const maxn=100;
var i,j,k,n,m,t,max,z:longint; ok:boolean; ans:real;
p,dist:array[1..15,1..15]of longint;
a,b,slake,link,emp:array[1..15]of longint;
ah,bh:array[1..15]of boolean;
function min(a,b:longint):longint;
begin
if a<b then exit(a); exit(b);
end;
function find(v:longint):boolean;
var i:longint;
begin
ah[v]:=true;
for i:=1 to n do
begin
if not(bh[i])and(dist[v,i]=a[v]+b[i]) then
begin
bh[i]:=true;
if(link[i]=0)or(find(link[i]))then
begin
link[i]:=v;
exit(true);
end;
end else
if dist[v,i]<a[v]+b[i] then slake[v]:=min(slake[v],a[v]+b[i]-dist[v,i]);
end;
exit(false);
end;
procere print;
var i:longint;
begin
inc(z);
writeln('Best Pairing ',z);
for i:=1 to n do
writeln('Supervisor ',i,' with Employee ',emp[i]);
end;
procere dfs(k:longint);
var i:longint;
begin
for i:=1 to n do
if ah[i] then
begin
inc(t,dist[k,i]);
if t>max then begin dec(t,dist[k,i]);exit; end;
ah[i]:=false; emp[k]:=i;
if k<>n then dfs(k+1)
else print;
ah[i]:=true; dec(t,dist[k,i]);
end;
end;
begin
assign(input,'p2400.in');reset(input);
assign(output,'p2400.out');rewrite(output);
readln(m);
for k:=1 to m do
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(dist,sizeof(dist),0);
fillchar(link,sizeof(link),0);
read(n);
for i:=1 to n do
for j:=1 to n do
begin read(t); dist[i,t]:=j-1; end;
for i:=1 to n do
for j:=1 to n do
begin read(t); inc(dist[t,i],j-1); end;
for i:=1 to n do
for j:=1 to n do
begin
dist[i,j]:=maxn-dist[i,j];
if dist[i,j]>a[i] then a[i]:=dist[i,j];
end;
for i:=1 to n do
repeat
fillchar(ah,sizeof(ah),false);
fillchar(bh,sizeof(bh),false);
fillchar(slake,sizeof(slake),$3f);
ok:=find(i);
if not(ok) then
begin
t:=maxlongint;
for j:=1 to n do t:=min(t,slake[j]);
for j:=1 to n do
begin
if ah[j] then dec(a[j],t);
if bh[j] then inc(b[j],t);
end;
end;
until ok;
max:=0; ans:=0; t:=0; z:=0;
for i:=1 to n do
begin
max:=max+a[i];
max:=max+b[i];
end;
max:=maxn*n-max;
ans:=max/(n shl 1);
writeln('Data Set ',k,', Best average difference: ',ans:0:6);
fillchar(ah,sizeof(ah),true);
for i:=1 to n do
for j:=1 to n do
dist[i,j]:=maxn-dist[i,j];
dfs(1);
writeln;
end;
close(input);close(output);
end.
⑺ c++中用模板函數寫冒泡演算法,對int,double,char三種數據類型的數據排序(要排在一起)
template <typename T>
void pop_sort(T *arr, int arr_size) {
for (int i = 0; i < arr_size - 1; ++i) {
for (int j = i + 1; j < arr_size; ++j) {
if(arr[i] > arr[j]) {
T tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
⑻ 求演算法專利申請書的樣本
專利申請指南 http://www.sipo.gov.cn/sipo/zlsq/zlsqxz/t20050728_51620.htm 專利申請的基本知識 http://www.hbipo.gov.cn/zlsq-21.htm 專利繳費指南 http://www.sipo.gov.cn/sipo/zlsq/zlsqxz/t20050728_51621.htm 專利申請文件的填寫和撰寫 http://www.quanso.net/zx/200504/1759z33894.aspx 專利申請文件撰寫實例分析 http://www.t999.cn/slfx.htm 專利申請文件示例 http://garden.2118.com.cn/dop/tyyq.html
⑼ 舍伍德演算法的4用類模板實現演算法
用類模板實現的演算法如下:
template<classType>
boolCOrderlist<Type>::Search(Type x, int&index)
//搜索有序鏈襲中的指定元素x、並將其位置放在index變數中
{//mCnrrentNumber為當前有序鏈表中元素的個數,它為類模
//板CorderLisl的數據成員,m為隨機搜索的次數;
int m=(int)sqrt(double(m_CurmntNumber));
int j;
index=O;
//m_LowBound為當前有序鏈表中最小元素的值.它為類模板
//CorderList的數據成員;
Type max=m_LowBound;
for(int i=l;i<=m,i++}
{j=randl();
//產生一個隨機數j,在數組m_pData[]隨機中找一個值
Type y-m—pDataU]:
If((max<y)&&(y<x))
//找最靠近查找元素x的索引位置Index
{max=y;
index=j;}
}
//從最靠近查找元素x的Index所指向的位置升妯進行順序搜索
while(m_pData[m_pLink[index]]<x)
index=m_pLink[index];∥指針後移
return(n_pData[m_pLink[indcx]==x);//是否找到
}
⑽ 求dijkstra+heap演算法pascal模板,謝大神!
program Dijkstra_heap;
type
path=record
des,dis,next:longint;
end;
var
i,j,k,l,m,n,top:longint;
dis:array[1..100000]of int64; //到源點的距離
head,num,heap:array[1..100000]of longint; //num[i]是i在堆中的位置,heap是堆
g:array[1..1000000]of path;
b:array[1..100000]of boolean; //判斷元素是否在堆中
procere up(o:longint);
var
tt,dd:longint;
begin
while o>1 do
begin
tt:=o div 2;
if dis[heap[tt]]>dis[heap[o]] then
begin
dd:=heap[tt];heap[tt]:=heap[o];heap[o]:=dd;
num[heap[o]]:=o;num[heap[tt]]:=tt; //更新元素的位置
o:=tt;
end
else break;
end;
end;
procere down(o:longint);
var
tt,dd,gg,a,c:longint;
begin
while o*2<=top do
begin
dd:=o*2;gg:=o*2+1;
a:=o;
if dd<=top then
if dis[heap[dd]]<dis[heap[a]] then a:=dd;
if gg<=top then
if dis[heap[gg]]<dis[heap[a]] then a:=gg;
if a<>o then
begin
c:=heap[a];heap[a]:=heap[o];heap[o]:=c;
num[heap[a]]:=a;num[heap[o]]:=o; //更新元素位置
o:=a;
end
else break;
end;
end;
begin
assign(input,'input.txt');reset(input);
assign(output,'output.txt');rewrite(output);
readln(n,m);
top:=0;
for i:=1 to n do head[i]:=0;
for i:=1 to m do
begin
readln(j,k,l);
inc(top);
g[top].des:=k;g[top].dis:=l;
g[top].next:=head[j];head[j]:=top;
end;
for i:=1 to n do begin dis[i]:=maxlongint;b[i]:=true; end;
dis[1]:=0;
for i:=1 to n do begin heap[i]:=i;num[i]:=i; end;
top:=n;
for i:=1 to n do
begin
k:=heap[1];b[k]:=false; //取出堆頂元素
j:=head[k];
heap[1]:=heap[top];dec(top);down(1);
while j<>0 do
begin
if b[g[j].des] then
if dis[g[j].des]>dis[k]+g[j].dis then
begin
dis[g[j].des]:=dis[k]+g[j].dis; //更新堆中元素
up(num[g[j].des]);
end;
j:=g[j].next;
end;
end;
writeln(dis[n]);
close(input);close(output);
end.