ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HRBUST 1819 石子合并问题--圆形版

2021-07-26 02:31:27  阅读:236  来源: 互联网

标签:HRBUST 210 -- 石子 1819 int num


题目链接:HRBUST 1819 石子合并问题--圆形版

题目大意:

题解:
区间dp模板题,由于是圆形操场,所以将数据再拓展一遍,用前缀和存储石子堆数量。

#include <iostream>
using namespace std;
#define INF 0x3f3f3f3f

int dpmin[210][210], dpmax[210][210], n, sum[210], num[210], ansmin, ansmax;

int main() {
    while (cin >> n) {
        for (int i = 1; i <= n; ++i) {
            cin >> num[i];
            num[i + n] = num[i];
        }
        for (int i = 1; i <= 2 * n; ++i) {
            sum[i] = sum[i - 1] + num[i];
        }
        for (int len = 2; len <= n; ++len) {
            for (int i = 1; i + len - 1 < 2 * n; ++i) {
                int j = i + len - 1;
                dpmin[i][j] = INF, dpmax[i][j] = 0;
                for (int k = i; k < j; ++k) {
                    dpmin[i][j] = min(dpmin[i][j], dpmin[i][k] + dpmin[k + 1][j] + sum[j] - sum[i - 1]);
                    dpmax[i][j] = max(dpmax[i][j], dpmax[i][k] + dpmax[k + 1][j] + sum[j] - sum[i - 1]);
                }
            }
        }
        ansmin = INF, ansmax = -INF;
        for (int i = 1; i <= n; ++i) {
            ansmin = min(ansmin, dpmin[i][i + n - 1]);
            ansmax = max(ansmax, dpmax[i][i + n - 1]);
        }
        cout << ansmin << ' ' << ansmax << endl;
    }
    return 0;
}

标签:HRBUST,210,--,石子,1819,int,num
来源: https://www.cnblogs.com/IzumiSagiri/p/15059648.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有