四邊形不等式求解合併石子(菜雞做法)

2022-07-02 05:48:08 字數 1617 閱讀 5209

這裡暫時先只提供min的做法,求max的時候直接把值改成負數即可

dp:f[i][j]=f[i][k]+f[k+1][j]+d[j]-d[i-1];

正常**:

#include#define ll long long

#define maxn 402

using namespace std;

ll n,a[maxn];

ll f[maxn][maxn];

ll d[maxn];

int main()

for(int l=2;l<=n;l++)

for(int l=2;l<=n;l++)

/*for(int l=2;l<=n;l++)

}f[i][j]=tmp;

s[i][j]=p;//決策點

} ll ans=99999999;

for(int i=1;i<=n;i++)

cout《結果錯誤~~

i倒序列舉;

#include#define ll long long

#define maxn 402

using namespace std;

ll n,a[maxn];

ll f[maxn][maxn];

ll d[maxn],s[maxn][maxn];

int main()

/*for(int l=2;l<=n;l++)

}f[i][j]=tmp;

s[i][j]=p;//決策點

} ll ans=99999999;

for(int i=1;i<=n;i++)

cout《結果錯誤~~

試一試第二種:

s[i][j-1]<=s[i][j]<=s[i+1][j]

i正序:

#include#define ll long long

#define maxn 402

using namespace std;

ll n,a[maxn];

ll f[maxn][maxn];

ll d[maxn],s[maxn][maxn];

int main()

/*for(int l=2;l<=n;l++)

}f[i][j]=tmp;

s[i][j]=p;//決策點

} ll ans=99999999;

for(int i=1;i<=n;i++)

cout《結果錯誤

倒序:#include#define ll long long

#define maxn 402

using namespace std;

ll n,a[maxn];

ll f[maxn][maxn];

ll d[maxn],s[maxn][maxn];

int main()

/*for(int l=2;l<=n;l++)

}f[i][j]=tmp;

s[i][j]=p;//決策點

} ll ans=99999999;

for(int i=1;i<=n;i++)

cout《結果正確!!

綜上:四邊形不等式很簡單,多試幾次就好啦~~(▽

)

石子合併 四邊形不等式優化

藍橋杯 演算法提高 石子合併 很明顯的區間dp,d i,j 表示取第i堆到第j堆石子最少花費,轉移方程d i,j min d i,k d k 1,j sum j sum i 四邊形a b c d,有w b,c w a,d 滿足決策單調性 且w a,c w b,d w b,c w a,d 滿足四邊形不...

合併石子 四邊形不等式優化

有一排石子,共n 堆。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。首先由直接動態規劃的方法來做,即 for int i 1 i n i for int j i j n j f...

四邊形不等式

總結一下最近幾天對dp優化中的四邊形不等式的學習。證明什麼的似懂非懂,我還是太年輕了。第一種,n 2 nlogn 例題 由於許可權問題 不公開題面 就是1個體積均為1 300,100000個物品,做乙個100000的揹包。發現體積最多只有 300 種,分開做。對於同種體積的物品,顯然按照價值從大到小...