Description & Range

丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。

例如,对于下面这圈数字(n=4,m=2):

要求最小值时,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值时,为((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特别值得注意的是,无论是负数还是正数,对10取模的结果均为非负值。

丁丁请你编写程序帮他赢得这个游戏。

Input

第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于 $10^4$ ,按顺序给出圈中的数字,首尾相接。

Output

有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。

Solution

啊这道题好有水平=.=

第一眼看到这题以为是和石子合并一样水的题,但是蛮多细节要注意的(我也是看题解才知道)

定义 f[0/1][i][j][k] 表示左端点在 i,右端点在 j,分成了 k 个部分的最大/最小乘积

最开始做这题开了五层循环,内层枚举了一下断点和断点两侧分别分成了多少个部分...

后来(抄题解)发现了其实不用枚举两侧分成了多少个部分,因为这会被之前或之后的循环枚举到,打个比方:如果枚举到了左端点是 i,右端点是 j,断点是 k,左边分成了p 个部分,右边分成了 q 个部分。

先明确一下,在合并时,我们只是关注 k+1~j 的前缀和再乘上左边已经乘好的部分, 即 f[i][j][p+q]=max{f[i][j][p+q-1]*(qzh[j]-qzh[k])}  所以是不用管右边分成了几个部分的,直接假设右边分成了一个部分,然后用左边的区间去“吃”右边的区间就好。

Code

// By YoungNeal
#include<cstdio>
#include<iostream>
using namespace std;

int n,m;
];
];
][][][];

int mod(int x){
    +)%;
}

signed main(){
    scanf("%d%d",&n,&m);
    ;i<=n;i++) scanf("%d",&val[i]),val[i+n]=val[i];
    ;i<=(n<<);i++) qzh[i]=qzh[i-]+val[i];
    ;i<=(n<<);i++){
        );j++)
            f[][i][j][]=f[][i][j][]=mod(qzh[j]-qzh[i-]);
    }
    /*愚蠢的五层循环
  for(int len=2;len<=(n<<1);len++){ for(int i=1;i<=(n<<1);i++){ int j=i+len-1; if(j>(n<<1)) break; for(int p=i;p<=j;p++){ for(int k=1;k<=min(m,j-i+1);k++){ for(int q=1;q<k;q++){ if(q<=p-i+1&&k-q<=j-p) f[i][j][k]=max(f[i][j][k],f[i][p][q]+f[p+1][j][k-q]+(qzh[p]-qzh[i-1])*(qzh[j]-qzh[p])); } } } } }*/ ;i<=m;i++){ ;l<=(n<<);l++){ ;r<=l+n-;r++){ //f[l][r][i] f[][l][r][i]=0x3f3f3f3f; ;k<r;k++){ //k不能=r! f[][l][r][i]=max(f[][l][r][i],f[][l][k][i-]*mod(qzh[r]-qzh[k])); f[][l][r][i]=min(f[][l][r][i],f[][l][k][i-]*mod(qzh[r]-qzh[k])); } } } } ,minn=0x3f3f3f3f; ;i<=n;i++) maxn=max(maxn,f[][i][i+n-][m]),minn=min(minn,f[][i][i+n-][m]); printf("%d\n%d",minn,maxn); ; }

[Noip2003 PJ] 数字游戏的更多相关文章

  1. cogs 983. [NOIP2003] 数字游戏

    983. [NOIP2003] 数字游戏 ★☆   输入文件:numgame.in   输出文件:numgame.out   简单对比时间限制:1 s   内存限制:128 MB 题目描述 丁丁最近沉 ...

  2. C语言猜数字游戏

    猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...

  3. 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II

    好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...

  4. java 猜数字游戏

    作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...

  5. 【原创Android游戏】--猜数字游戏Version 0.1

    想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...

  6. 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用

    --------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...

  7. NOIP2003pj数字游戏[环形DP]

    题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...

  8. Codevs 1229 数字游戏

    1229 数字游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description Lele 最近上课的时候都很无聊,所以他发明了 ...

  9. codevs 1229 数字游戏(可重集的全排列)

    传送门 Description Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间.  这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后 ...

随机推荐

  1. 【推荐】免费,19 款仿 Bootstrap 后台管理主题下载

    声明: 1. 本篇文章提到的仿 Bootstrap 风格的主题,是基于 jQuery 的 ASP.NET MVC 控件库的主题. 2. FineUIMvc(基础版)完全免费,可以用于商业项目. 目录 ...

  2. MySQL Crash Errcode: 28 - No space left on device

    一台MySQL服务器突然Crash了,检查进程 ps -ef | grep -i mysql 发现mysqld进程已经没有了, 检查错误日志时发现MySQL确实Crash了.具体如下所示: 注意日志中 ...

  3. NLP+VS︱深度学习数据集标注工具、方法摘录,欢迎补充~~

    ~~因为不太会使用opencv.matlab工具,所以在找一些比较简单的工具. . . 一.NLP标注工具BRAT BRAT是一个基于web的文本标注工具,主要用于对文本的结构化标注,用BRAT生成的 ...

  4. NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)

    有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的 ...

  5. java代码调用使用cxf搭建的webService服务传递对象

    前边成功创建好一个cxf的webServcie服务,并带了一个无参数的方法.现在进一步尝试了使用带参数的方法,分别测了用String为参数和用自定义的对象为参数. 其中,使用String为参数时和不带 ...

  6. 错误代码: 1054 Unknown column 't.createUsrId' in 'group statement'

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:select count(t.id),t.`createUserId` fr ...

  7. vxworks下的串口测试程序

    VXWORKS串口设置说明: 一般有这么几步: 打开串口 设置串口raw模式,清空输入输出的缓冲区 设置波特率,数据位,停止位,校验方式 便可以开始读和写 打开串口: fd = open(" ...

  8. 配置WebLogic的详细步骤

    配置WebLogic的详细步骤 1.安装好WebLogic后,进入配置阶段,点击"Getting started with WebLogic Server 10.3.6" 2.进入 ...

  9. C# 文件copy和文件删除

    C# 文件copy和文件删除 public bool CopyFile(string SourcePath, string CopyPathFoder) { bool bfg = false; if ...

  10. python实现简单排序算法

    算法 递归两个特点: 调用自身 有穷调用 计算规模越来越小,直至最后结束 用装饰器修饰一个递归函数时会出现问题,这个问题产生的原因是递归的函数也不停的使用装饰器.解决方法是,只让装饰器调用一次即可,那 ...