Codevs1966 乘法游戏 区间dp

来源:互联网 发布:淘宝如何推广店铺 编辑:程序博客网 时间:2024/04/28 14:32

Codevs1966 乘法游戏

跟石子归并差不……多…?
好像所有的区间dp都差不多,然而我还是不会做。

状态转移方程:dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]+num[i]*num[j]*num[k]);
代码:

#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>using namespace std;#define MAXN (100+10)int num[MAXN];int dp[MAXN][MAXN];int main(){    int n;    cin >> n;    for(int i = 1; i <= n; i ++) scanf("%d", &num[i]);    memset(dp,63,sizeof(dp));    for(int i = 1; i <= n; i ++) dp[i][i] = dp[i][i+1] = 0;    for(int i = n; i >= 1; i --)        for(int j = i+1; j <= n; j ++)            for(int k = i; k <= j; k ++)                dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]+num[i]*num[j]*num[k]);    cout << dp[1][n];    return 0;}
0 0
原创粉丝点击