匆匆忙忙搞了一下四邊形優化,也就是做了幾道入門題而已
四邊形不等式詳解:
反正我就記住這句話: 判斷w是否為凸即判斷 w[i,j+1]-w[i,j]的值隨著i的增加是否遞減
hdu 2829
**:
#include #include #include using namespace std;
#define maxn 1111
int dp[maxn][maxn];
int w[maxn][maxn];
int a[maxn], s[maxn];
int t[maxn][maxn];
int main()
for(int i= 1; i<= n; i++)
for(int j= i+1; j<= n; j++)
w[i][j]= w[i][j-1]+ a[j]*(s[j-1]- s[i-1]);
memset(dp, -1, sizeof dp);
for(int i= 1; i<= n; i++)
for(int j= 1; j<= m; j++)
for(int i= n; i>= j; i--)}}
printf("%d\n",dp[n][m]);
} return 0;
}
hdu 3480 **:
#include #include #include using namespace std;
#define maxn 10011
#define maxm 5011
int a[maxn];
int t[maxn][maxm], dp[maxn][maxm];
int main()
for(int j= 2; j<= m; j++)
for(int i= n; i>= j; i--)}}
int ans;
if(m== 0)
ans= dp[n][1]; //m==0的時候選出0個子集ans不應該為0,我以為結果是0
else
ans= dp[n][m];
printf("case %d: %d\n",c,ans);
} return 0;
}
四邊形優化模板
一般適用於區間dp優化。對於dp i j dp i k d k j w i j 的dp方程,如果滿足w i j w i j w i j w i j i i j j 則w i j 是凸的,也就是說,對於dp i j 的決策s i j 必然滿足不等式s i j 1 s i j s i 1 j 所以求決策...
dp四邊形優化
如果dp i j min dp i k dp k 1 j w i j 且滿足dp a c dp b d dp a d dp c d a那麼dp具有四邊形不等式性質 另外如果可以證明w i j 滿足單調性和四邊形不等式性質,那麼dp也具有四邊形不等式性質 單調性 w i j w i j 1 w i 1...
石子合併 四邊形優化
動態規劃的經典題目,在遇到狀態轉移方程像min w i k w k 1 j m i j 的時候就可以使用考慮使用四邊形優化。在i i j j 的條件滿足的情況下,有w i j w i j w i j w i j 那麼就可以使用s i j 同時s i j 又有單調遞增性 並沒有仔細看 以後有時間一定補...