UVA 10304 Optimal Binary Search Tree

来源:互联网 发布:linux ubuntu 安装gcc 编辑:程序博客网 时间:2024/04/29 17:25

大意略。

思路:参见《算法导论》P215.

#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>using namespace std;const int MAXN = 260;const int INF = 0x3f3f3f3f;int n;int d[MAXN][MAXN];bool vis[MAXN][MAXN];int sum[MAXN];int p[MAXN];void init(){memset(sum, 0, sizeof(sum));memset(vis, 0, sizeof(vis));}/*int sum(int i, int j){int s = 0;for(int k = i; k <= j; k++) s += p[k];return s;}*/int dp(int i, int j){int &ans = d[i][j];if(vis[i][j]) return ans;vis[i][j] = 1;ans = INF;if(i >= j) ans = 0;else{for(int r = i; r <= j; r++){int w = sum[j] - sum[i-1] - p[r];ans = min(ans, dp(i, r-1) + dp(r+1, j) + w);}}return ans;}void read_case(){init();for(int i = 1; i <= n; i++){scanf("%d", &p[i]);sum[i] = sum[i-1] + p[i];}}void solve(){read_case();int ans = dp(1, n);printf("%d\n", ans);}int main(){while(~scanf("%d", &n)){solve();}return 0;}


原创粉丝点击