P4342 [IOI1998] Polygon ( 区间dp

#include 
using namespace std;
using VI = vector;
using ll = long long;
using PII = pair;
const int mod = 19650827;
int n,s;
int num[200];
char op[200];
int dp[200][200];
int dp2[200][200];


int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>op[i]>>num[i];
        num[i+n] = num[i];
        op[i+n] = op[i];
    }

    memset(dp,-0x3f,sizeof dp);
    memset(dp2,0x3f,sizeof dp2);
    for(int i=1;i<=2*n;i++){
        dp[i][i] = num[i];
        dp2[i][i] = num[i];
    }

    for(int len=2;len<=n;len++){
        for(int i=1;i+len-1<=2*n;i++){
            int j = i + len - 1;
            for(int k=i;k

因为存在负数×负数等于正数的情况,所以还要同时记录整个区间的最小值

破环为链 不说了,大概就是一个环可以看出分别 从 1 ,2, 3 ......n处断开的n条链,所以翻倍一下

你可能感兴趣的:(dp,算法,动态规划)