POJ3411 狀態dp 鬆弛轉移

2021-06-12 23:18:19 字數 830 閱讀 6799

狀態轉移有兩種,一種是對於乙個狀態v找出這個狀態能夠來自哪些狀態u,然後更新v,但有時這種轉移方法不太好用,那麼考慮另一種轉移方法,對於乙個狀態u,我們考慮狀態u能夠影響的所有狀態v,然後不斷鬆弛,像spfa一樣...

這題就是第二種轉移方法。

另外inq標記陣列確實能節省時間,畢竟減少了節點入隊次數... 這題不加inq16ms,加上inq 0ms

#include#include#include#include#include#includeusing namespace std;

#define inf 0x7fffffff

int dp[15][1<<10];

bool inq[15][1<<10];

struct road

road(int b,int c,int p,int r)

};vectorgra[15];

int work(int n)

{ queueq1,q2;

int i,j,u,v,c,p,r,s;

memset(inq,0,sizeof(inq));

for(i=0;i<10;++i)

for(j=0;j<(1<<10);++j)

dp[i][j]=inf;

dp[0][1]=0,inq[0][1]=true;

q1.push(0),q2.push(1);

while(!q1.empty())

{u=q1.front();

q1.pop();

s=q2.front();

q2.pop();

inq[u][s]=false;

for(i=0;i

POJ3411 狀態壓縮DP

給n個城市,m條路,並給出m條路的資訊,每條資訊給出起點a終點b和中間節點c,有兩種付款方式 1 在中間節點c付款 就是可以提前交錢 r a,b 2 到終點b付款 p a,b 問1到n的最小花費dp i s 經過在集合s中的點到達i的最短花費 1 當s中沒有c時 dp b s b min dp i ...

poj 2068(博弈 狀態轉移)

如果某個狀態能到達的狀態都是必勝態,那麼此狀態為必敗態 如果某個狀態能到達的狀態存在必敗態,那麼此狀態為必勝態 include include include include include include include include include include include includ...

簡單dp的狀態轉移方程集合

1.對於任一種n的排列a,定義它的e值為序列中滿足a i i的數的個數。給定n和k k n 1000 問n的排列中e值為k的個數。dp i j 表示i個數的排列中e值為j的個數。假設現在已有乙個e值為j的i的排列,對於新加入的乙個數i 1,將其加入排列的方法有三 1 把它 放最後,加入後e值不變 2...