首页 > 其他分享 >P1043 [NOIP2003 普及组] 数字游戏

P1043 [NOIP2003 普及组] 数字游戏

时间:2024-10-12 17:01:11浏览次数:6  
标签:普及 NOIP2003 int mi dpmin P1043 num dp

链接:https://www.luogu.com.cn/problem/P1043
题面:

思路:
区间dp,设dpmax/dpmin[i][j][k]表示从序列i->j分成k份的最大/最小值,然后根据递推公式
dpmin[i][j][m] = min(dpmin[i][j][m], dp[i][k][mi]*dp[k+1][j][m-mi]),for ∀mi∈[1,m),k∈[i,j)注意不用取模,因为求出来的就已经是相乘的结果(这里被坑了)。
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N=200;
const int M=13;
#define int long long 
int num[N];
int n,m;
int dpmin[N][N][M],dpmax[N][N][M];
int modten(int num)
{
    while(num<0)num+=10;
    return num%10;
}
signed main()
{
    IOS;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>num[i],num[i]=modten(num[i]),num[i+n]=num[i],num[i]+=num[i-1];
    for(int i=n+1;i<=2*n;i++)num[i]+=num[i-1];
    
    for(int i=1;i<=2*n;i++)
        for(int j=1;j<=2*n;j++)
            dpmin[i][j][1]=dpmax[i][j][1]=modten(num[j]-num[i-1]);
            
    
    for(int mi=2;mi<=m;mi++)
    for(int len=mi;len<=n;len++)
    {
        for(int i=1;i<2*n;i++)
        {
            int j=i+len-1;
            if(j>2*n)break;
            for(int k=i;k<j;k++)
            {
                for(int mii=1;mii<mi;mii++)
                {
                    int dp_choice_min=dpmin[i][k][mii]*dpmin[k+1][j][mi-mii];
                    int dp_choice_max=dpmax[i][k][mii]*dpmax[k+1][j][mi-mii];
                    //if(mi!=m)dp_choice_max=modten(dp_choice_max),dp_choice_min=modten(dp_choice_min);
                    if(dpmin[i][j][mi])dpmin[i][j][mi]=min(dpmin[i][j][mi],dp_choice_min);
                    else dpmin[i][j][mi]=dp_choice_min;
                    if(dpmax[i][j][mi])dpmax[i][j][mi]=max(dpmax[i][j][mi],dp_choice_max);
                    else dpmax[i][j][mi]=dp_choice_max;
                }
            }

        }
    }
    int ansmin=INT_MAX,ansmax=0;
    for(int i=1;i<=n;i++)
    {
        ansmin=min(ansmin,dpmin[i][i+n-1][m]);
        ansmax=max(ansmax,dpmax[i][i+n-1][m]);
    }
    cout<<ansmin<<'\n'<<ansmax;

    return 0;
}

标签:普及,NOIP2003,int,mi,dpmin,P1043,num,dp
From: https://www.cnblogs.com/zzzsacmblog/p/18460886

相关文章

  • 南沙C++信奥赛陈老师解一本通题 1939:【07NOIP普及组】纪念品分组
    ​ 【题目描述】元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完......
  • 南沙C++信奥赛陈老师解一本通题 1950:【10NOIP普及组】接水问题
    ​【题目描述】学校里有一个水房,水房里一共装有m个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i号同学的接水量为w。接水开始时,1 到m 号同学各占一个水龙头,并同时打开水龙......
  • 打卡信奥刷题(018)用C++信奥P9496[普及组/提高] 「RiOI-2」hacker
    「RiOI-2」hacker题目背景在小树丛边坐落着一个幻想的城堡。这里是E国的领地,而小E,则是E国之王。现在,伟大的E国之王正在披挂出征。不过听说E国之王遇见了两个叫ACCEPT和BOTH的人,他们是谁?题目描述现在有正整数n......
  • 2020CSP-J普及组第二轮试题及解析(第二题直播获奖live)
    参考程序代码:#include<bits/stdc++.h>usingnamespacestd;constintN=610;intn,w,m;inta[N];intmain(){ scanf("%d%d",&n,&w); intx; for(inti=1;i<=n;i++) { scanf("%d",&x);//读入该分数 a[x]++;//该分数放到桶里 ......
  • 南沙C++信奥赛陈老师解一本通题 2099:【23CSPJ普及组】公路(road)
    ​ 2099:【23CSPJ普及组】公路(road)时间限制:1000ms      内存限制:524288KB提交数:3793   通过数: 1575【题目描述】小苞准备开着车沿着公路自驾。公路上一共有 nn 个站点,编号为从 11 到nn。其中站点 ii 与站点i+1i+1 的距离为vivi 公里。......
  • 南沙C++信奥赛陈老师解一本通题 1966:【14NOIP普及组】比例简化
    ​ 【题目描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大......
  • 南沙C++信奥赛陈老师解一本通题 1984:【19CSPJ普及组】纪念品
    ​ 【题目描述】小伟突然获得一种超能力,他知道未来 T 天 NN种纪念品每天的价格。某个纪念品的价格是指购买一个该纪念品所需的金币数量,以及卖出一个该纪念品换回的金币数量。每天,小伟可以进行以下两种交易无限次:1.任选一个纪念品,若手上有足够金币,以当日价格购买该纪念品;2......
  • 南沙C++信奥赛陈老师解一本通题 1983:【19CSPJ普及组】公交换乘
    ​ 【题目描述】著名旅游城市B市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案:1、在搭乘一次地铁后可以获得一张优惠票,有效期为 4545 分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指开始乘公交车的时间......
  • 南沙C++信奥赛陈老师解一本通题: 1963:【13NOIP普及组】小朋友的数字
    ​ 【题目描述】有 nn 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:......
  • (洛谷)题目题号P1047 [NOIP2005 普及组] 校门外的树
    Hello大家好我是小亦,这是今天发布的第二篇题解,唉我就在想怎么样才能把粉丝提上来呢隔壁朋友都比我高了好多唉苦恼qwq,好吧接受现实,好那么好今天我们来讲的是来自于NOIP2005年普及组的真题名叫:校门外的树,其实这道题跟其他几道题很相似,应该是同一家的吧qwq,好了不废话了思路给大家q......