POJ 1179 列舉 區間 DP

2021-10-09 08:39:23 字數 1427 閱讀 2394

題意

傳送門 poj 1179

題解列舉初始時刪的邊,將環拆成鏈。觀察刪邊、縮點的過程,有明顯的區間性質,考慮用區間 dpdp

dp求解。由於點權值可能出現負數,那麼在狀態轉移求最大值的過程中,要考慮負負得正的情況。

d p[

i][j

][2]

dp[i][j][2]

dp[i][

j][2

] 代表區間 [i,

j)

[i,j)

[i,j

) 最終能得到的最大值(第三維為 1

11)、最小值(第三維為 0

00),設 opop

op為 +

++ 或 ×

\times

× 運算,idid

id為 0

00 或 1

11,則有遞推式dp

[i][

j][1

]=mi

ni

<

k<

j\begin dp[i][j][0]=max_dp

[i][

j][1

]=mi

ni<

k​

#include

#include

#include

#include

using

namespace std;

#define inf 0x3f3f3f3f

#define maxn 55

int n, v[maxn]

, id[maxn]

, res[maxn]

, dp[maxn]

[maxn][2

];char op[maxn]

;int

main()

int mx =

-inf, cnt =0;

for(

int i =

0; i < n; i++

)memset

(dp,0,

sizeof

(dp));

for(

int i =

0; i < n; i++

)for

(int w =

2; w <= n; w++

) dp[i]

[j][0]

= mn, dp[i]

[j][1]

= mx;}}

int tmp = dp[0]

[n][1]

;if(tmp >= mx)

}printf

("%d\n"

, mx)

;for

(int i =

0; i < cnt; i++)}

return0;

}

POJ 1018 列舉 貪心

題意 有n件商品,每件商品有m個製造商,每個製造商製造的商品有不同的 頻寬和 每件商品必須選乙個製造商,最後的頻寬是所有頻寬中的最小值,價值是所有商品的總 目的是使b p最大,輸出最大的b p的值。思路 由於資料範圍比較小,所以可以列舉。可以求出所有製造商的商品的最大頻寬和最小頻寬,然後列舉在兩者之...

poj 2002 列舉 雜湊

給定n個點,求出這些點一共可以構成多少個正方形。sample input 4 1 00 1 1 10 0 90 0 1 02 0 0 21 2 2 20 1 1 12 1 4 2 5 3 70 0 5 20sample output 1 61可列方程 可以得出 知道兩點求出其餘兩點 x3 node ...

poj1873 列舉 凸包

題意 平面上有n棵樹,現在要砍掉其中的一部分來做成籬笆將剩下的樹包圍起來,現在給出每棵樹的座標 價值和可以製造籬笆的長度,求砍掉最少價值的樹,將剩下的樹包圍起來,當兩種方式的價值相同時,取砍掉樹更少的方式。由於樹棵樹不大於15,可以二進位制列舉情況,求出其它樹構成的凸包的周長即可 include i...