首页 > 其他分享 >P1880 [NOI1995] 石子合并

P1880 [NOI1995] 石子合并

时间:2023-03-01 22:11:26浏览次数:50  
标签:ch const int NOI1995 ll 石子 P1880 define

P1880 [NOI1995] 石子合并 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

本题重要的是是个圆。

圆的通常思维,是把圆拆成两条链

 

这样子 n 变成 2*n(区间dp模板题)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back   //vector函数
#define popb pop_back  //vector函数
#define fi first
#define se second
const int N=210;
//const int M=;
const int inf=0x3f3f3f3f;     //一般为int赋最大值,不用于memset中
//const ll INF=0x3ffffffffffff; //一般为ll赋最大值,不用于memset中
int T,n,a[N],sum[N];
int dp[2][N][N];
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}
int main()
{
//    freopen("","r",stdin);
//    freopen("","w",stdout);
    n=read();
    for(int i=1;i<=n;i++) a[i]=read(),sum[i]=sum[i-1]+a[i];
    for(int i=n+1;i<=2*n;i++) a[i]=a[i-n],sum[i]=sum[i-1]+a[i];
    for(int i=1;i<=2*n;i++)
        for(int j=1;j<=2*n;j++) dp[0][i][j]=inf;
    for(int i=1;i<=2*n;i++) dp[0][i][1]=0;
    for(int len=2;len<=n;len++)
        for(int i=1;i+len-1<=2*n;i++)
            for(int j=i;j<=i+len-2;j++)
            {
                dp[0][i][len]=min(dp[0][i][len],dp[0][i][j-i+1]+dp[0][j+1][i+len-j-1]+sum[i+len-1]-sum[i-1]);
                dp[1][i][len]=max(dp[1][i][len],dp[1][i][j-i+1]+dp[1][j+1][i+len-j-1]+sum[i+len-1]-sum[i-1]);
            }
    int ans1=inf,ans2=0;
    for(int i=1;i<=n;i++) ans1=min(ans1,dp[0][i][n]),ans2=max(ans2,dp[1][i][n]);
    printf("%d\n%d",ans1,ans2);
    return 0;
}

 

标签:ch,const,int,NOI1995,ll,石子,P1880,define
From: https://www.cnblogs.com/Willette/p/17170074.html

相关文章

  • 1140. 石子游戏 II (Medium)
    问题描述1140.石子游戏II(Medium)爱丽丝和鲍勃继续他们的石子游戏。许多堆石子排成一行,每堆都有正整数颗石子piles[i]。游戏以谁手中的石子最多来决出胜负。爱丽丝......
  • 拿石子dp
    每次从一开始或者最后拿,拿多的赢#include<iostream>usingnamespacestd;intstone[10];intdp[10][10];//从i到j两人数量差的最大值intmain(){intn;......
  • 从合并石子学区间DP
    导读^_^区间DP是一种思考方式很不一样的DP问题。结合合并石头进行问题思考,你就能学会区间DP啦!何为区间DP其DP推导是在一个区间内进行的,通常DP数组代表某个区间的某......
  • 「解题报告」石子游戏
    题目大意Alice和Bob在\(n\)堆石子中取石子,这\(n\)堆石子的数量分别是\(a_i\),Alice先取,每人只能取\(1\simx\)个,假如双方都使用最优策略,求当\(x\)为\(......
  • P1880 [NOI1995] 石子合并 题解
    P1880[NOI1995]石子合并区间DP。首先将其复制一遍(因为是环)。设\(f[i][j]\)表示将\(i\)到\(j\)段的石子合并需要的次数。有\[f[i][j]=0(i=j)\]\[f[i][j]......
  • 牛客小白月赛65——D-牛牛取石子
    链接:https://ac.nowcoder.com/acm/contest/49888/D来源:牛客网牛牛和牛妹在玩游戏,他们的游戏规则是这样的:一共有两堆石子,第一堆有aaa个,第二堆有bbb个,牛牛和牛妹轮流取......
  • 牛客小白月赛65 D-牛牛取石子(博弈论)
    https://ac.nowcoder.com/acm/contest/49888/D题目大意:一共有两堆石子,第一堆a个,第二堆b个,牛牛(先手)和牛妹轮流取石子:2种方案种挑一种1.第一堆取1个,第二堆取2个2......
  • 牛牛取石子(对称策略/模拟棋)
    题目链接题目描述:牛牛和牛妹在玩游戏,他们的游戏规则是这样的:一共有两堆石子,第一堆有\(a\)个,第二堆有\(b\)个,牛牛和牛妹轮流取石子,牛牛先手,每次取石子的时候只能从以......
  • 【GDOI2017 Day 1 T2】取石子游戏
    Description如果你不想和题面软磨硬泡的话,请。。。。。(以下省略5000字)……给你一个1为根,N个点的树,每个点有权值。定义mex(S)表示不在S集合中最小的非负整数对于每个点,求......
  • 1753. 移除石子的最大得分
    1753.移除石子的最大得分题解:先将a,b,c预处理为a<=b<=c当a+b<=c时,【ac】和【bc】轮流取,直到a和b为0所以答案为a+b当a+b>c时,设【ac】取......