⑴ 狀態壓縮是什麼
= =|| sgu有很多這樣的題目
講義在冬令營論文裡面有
08陳丹琦,劉弈
00年的DP論文里也有一些
⑵ 電腦編程問題
dp壓縮
這是解題報告
第二題 過河-River
[問題分析]
此題初看是一個典型的搜索題。從河的一側到河的另一側,要找最少踩到的石頭數。但從數據范圍來看。1..109長度的橋。就算是O(n)的演算法也不能在一秒內出解。
如果搜索石子,方法更困難。這要考慮到前面以及後面連續的石子。若換一種方法。用動態規劃,以石子分階段的一維動規,時間復雜度是O(n2)。最多也只有100×100的時間。但是這樣分狀態就十分復雜。因為石頭的分布是沒有任何規律,而且會有後效性。
這樣只好有回到搜索。搜索石子會和動規一樣沒有規律。我們一橋的長度為對象進行搜索,然後再加上一個巧妙的剪枝就可以在很短的時間內出解。可以號稱為O(m2)。[批註:號稱一詞已成為湖南OI本世紀流行詞彙 ]
[題目實現]
先以時間為對象進行搜索。時間復雜度為O(L)。從橋的一側到另一側,中間最多隻有100個石子。假設橋長為最大值(109),石頭數也為最大值(100)。這樣中間一定會有很多「空長條」 (兩個石子中的空地),處理時把這些跳過,就只會有M次運算。關鍵是找出每一個可以跳過的「空長條」。
我們可以先把青蛙可以跳出的所有可能求出,然後就可以求出可以忽略的「空長條」。
[特殊演算法]
a[i]:前i個坐標中石子最小個數,初始為第i個坐標的石子個數
b[i]:第i個石子坐標
動規
a[0]=0;
對n>=t
a[n]=min{a[n]+a[n-s],a[n]+a[n-s-1], ...,a[n]+a[n-t]}
對s=<n<t
a[n]=max{a[n]+a[n-s],a[n]+a[n-s-1],...,a[n]+a[0]}
但由於n較大直接動規會超時。所以要將n壓縮
查看坐標,可以發現,如果b[i]-b[i-1]>t,顯然對於b[i-1]+t<n<b[i],a[n]總是等於a[b[i-1]]..a[b[i-1]+t]中的數,因此可對其進行壓縮。
注意,在計算過程中,由於其中有一些坐標是永遠走不到的,因此需要用一個布爾型的數組c[n]進行判斷。方法是,對於c[n],如果0<n<s,則c[n]為false,如果n>s,c[n-t],c[n-t+1],...,c[n-s]都為false,則c[n]也為false。
這個我試了,是對的
type arr=array[0..100000] of longint;
var a,f,stone,stone2:arr;
l,s,x,t,m,n,o,p,i,j,k,min:cardinal;
procere deal;
var i:longint;
begin
stone[0]:=0;
stone[m+1]:=l;
for i:=1 to m+1 do
if stone[i]-stone[i-1]>=100 then stone2[i]:=stone2[i-1]+100
else stone2[i]:=stone2[i-1]+stone[i]-stone[i-1];
end;
begin
readln(l);
readln(s,t,m);
for i:=1 to m do
read(stone[i]);
if s=t then begin
for i:=1 to m do
if stone[i] mod s=0 then inc(o);
writeln(o);
end
else begin
for i:=1 to m-1 do
for j:=1 to m-i do
if stone[j]>stone[j+1] then begin
stone[0]:=stone[j];
stone[j]:=stone[j+1];
stone[j+1]:=stone[0];
end;
Deal;
l:=stone2[m+1];
for i:=1 to m do
a[stone2[i]]:=1;
f[0]:=0;
for i:=1 to l+t do begin
f[i]:=maxlongint-1;
for j:=t downto s do
if i<j then break
else
if (f[i-j]+a[i])<f[i] then f[i]:=f[i-j]+a[i];
end;
min:=maxlongint;
for i:=l to l+t do begin
if f[i]<min then min:=f[i];
end;
writeln(min);
end;
end.
說了就是狀態壓縮dp
⑶ 哈密頓圖的演算法級別
尋找哈密頓路的確定演算法雖然很難有多項式時間的,但是這並不意味著只能進行時間復雜度為O(n!*n)暴力搜索.利用狀態壓縮動態規劃,我們可以將時間復雜度降低到O(2^n*n^3),具體演算法是建立方程f[i][S][j],表示經過了i個節點,節點都是集合S的,到達節點j時的最短路徑.每次我們都按照點j所連的節點進行轉移.
⑷ noip狀態壓縮DP的起步
狀壓dp不屬於noip考察范圍了 noip最多隻有簡單數學可以證明的路徑壓縮 例如過河
狀壓dp最簡單的炮兵陣地等都不在noip考察范圍 狀壓dp只會出現在省選及以上難度的題中
⑸ 如果在s7程序中,把很多狀態壓縮在一個字里邊,例如DB1.DBW10.我想在Intouch中按位讀取狀態,該怎麼設置。
在寄存器地址後面加上:要讀取的位數,就可以了,你可以試試,像這種項目格式的東西,你可以看下幫助裡面ITEM的內容,講得相當仔細!
⑹ 關於狀態壓縮的按位運算符,請詳細講解一下各個按位運算符的用法和使用方法,謝謝
這個問題一般是學到那就可以一看就會,如果你不會,說明基礎太差,好好補補數組和變數的類型就行
⑺ 汽車上ECON和AUTO是什麼意思的哦
和汽車相關的AUTO在不同地方有不同的含義。
例如下圖里綠色文字上邊的Auto是自動空調的意思,就是車能根據當時環境溫度自動調節空調溫度和出風量大小,不需要手動調節。 還有一個紅字部分的大小的A,表示的是發動機節能啟停,也就是部分車上配備的一種節能模式,即在車輛行駛過程中遇到前方紅燈或需要停車的情況,司機踩剎車直到踩到底後車輛停下來的情況下,發動機會暫停工作,此時發動機處於休息狀態,這種情況下可以節省每次等紅燈或是臨時停車時車輛開啟狀態下的油耗。
還有的某些車的玻璃或者車門板上會有auto字樣的文字,其實這個就是指自動汽車的意思,因為auto英文也有汽車,自動的意思。
⑻ 理想氣體由初狀態壓縮至相同終態的比體積,分別經歷了定溫壓縮和絕熱壓縮。請
用P--V圖來分析容易理解.
初態的體積是V0,終態的體積是V.
當用等溫壓縮時,初態與末態的溫度相等,即初態和末態兩個位置都在同一條等溫線上(等溫線是雙曲線),這時末態壓強是P1(P1比初態壓強大些).
當用絕熱壓縮時,顯然末態的溫度高於初態溫度(相信你知道溫度較高的等溫線與前一情況的等溫線的位置關系).
由於以上兩個過程中,末態的體積是相同的,所以容易看到在絕熱壓縮過程中的末態氣體壓強P2>P1.即在絕熱壓縮過程中的終態壓強較大.
⑼ ACM求解5
網上給你找了一個:
這是一道博弈題。所謂博弈題,首先要記在心上的是,每個人在每一步都會選擇對他最優的選擇。這種最優是全局的,即如果A先選擇,B後選擇,則A會選擇那種使得B的最佳選擇最差的路徑。
當然,這里討論的僅使零和博弈,對於這類完全信息的零和博弈,可以採用動態規劃從末狀態倒推。
然而本題有一點特殊之處,它是隨機結束的重復博弈,因而只能用貝葉斯公式求解。而且再算概率的時候,可能會出現環,即自己的值有自己推得。這種情況如果處理不好,可能會導致死循環。
其實有一點是確定的,無論A選擇槍擊誰,其擊偏的概率是一定的,而當其擊偏後,B槍擊目標的選擇與之前A的選擇無關。
因此A在槍擊時,只需選擇那個擊中後使A獲利(存活率)最大的人即可。
由此,即可做狀態壓縮DP。其時間復雜度為O(2^n*n)。
值得注意的是,當獲利相同時的隨機選擇,雖然不會影響A的存活率,但會影響其他人的。
關鍵代碼如下:
void dp()
{
int i,j,s,pa,pb,pc,ia,ib,ll,rr;
double ms,ts,ave;
for (i=2;i<=n;++i) // 存活人數
for (j=0;j<tlst;++j)//枚舉每種存活i人的情況
{
s=lst[j];//保存一種存活i人的情況
int kill[N][N],next[N][N],random[N];//pa選擇射擊kill[pa],然後輪到next[pa],等價選擇有random[pa]種
for (ia=0;ia<twho[s];++ia)
{
pa=who[s][ia];
ms=-1;
for (ib=0;ib<twho[s];++ib)
if (ia!=ib)//pa嘗試射擊pb
{
pb=who[s][ib];
if (ib==(ia+1)%twho[s])
pc=who[s][(ib+1)%twho[s]];
else
pc=who[s][(ia+1)%twho[s]];
ts=dps[s^(1<<pb)][pc][pa];
if (!dblcmp(ms,ts))//等價解
{
kill[pa][random[pa]]=pb;
next[pa][random[pa]]=pc;
++random[pa];
}
else if (dblcmp(ms,ts)==-1)//更優解
{
kill[pa][0]=pb;
next[pa][0]=pc;
random[pa]=1;
ms=ts;
}
}
}
double cirp=1,temp;
for (ia=0;ia<twho[s];++ia)
{
pa=who[s][ia];
cirp*=dperce[pa];
}
cirp=1.0/(1.0-cirp);
//計算pa射擊,pb存活的概率
for (ia=0;ia<twho[s];++ia)
{
pa=who[s][ia];
for (ib=0;ib<twho[s];++ib)
{
pb=who[s][ib];
dps[s][pa][pb]=0;
}
temp=1;
for (ll=0;ll<twho[s];++ll)
{
pc=who[s][(ia+ll)%twho[s]];
for (ib=0;ib<twho[s];++ib)
{
pb=who[s][ib];
ave=0;
for (rr=0;rr<random[pc];++rr)
ave+=dps[s^(1<<kill[pc][rr])][next[pc][rr]][pb];
ave/=random[pc];
dps[s][pa][pb]+=ave*temp*perce[pc];
}
temp*=dperce[pc];
}
for (ib=0;ib<twho[s];++ib)
{
pb=who[s][ib];
dps[s][pa][pb]*=cirp;
}
}
}//枚舉每種存活i人的情況
s=(1<<n)-1;
for (i=0;i<n;++i)
{
if (i) printf(" ");
printf("%.2lf",dps[s][0]*100+eps);
}
printf("\n");
}
⑽ 我的冰箱是西門子的,冰箱的製冷再00度,冷藏正常冷凍處於半凍狀態壓縮機還一直再運轉,還有修的必要嗎
建議你把冰箱溫控器調整試試看,下面告訴你溫控器調整方法:在冰箱冷藏室里有溫控器,你在夏天最熱時可調整到二檔,這樣夏天冷藏室不結冰。冬天最冷時調整到五檔或六檔,這樣冬天冰箱可以正常啟動,平常不熱不冷時可以調整三檔至四檔就行了,七檔是強製冷,調到七檔冷藏室也會結冰的,請採納。