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. Lua Table转C# Dictionary

    因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作. 昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数. 本来以为很简单个事情,结果 ...

  2. The required anti-forgery form field "__RequestVerificationToken" is not present.

    @using (Html.BeginForm()) { @Html.AntiForgeryToken() }

  3. 创建基于MailKit和MimeKit的.NET基础邮件服务

    邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...

  4. R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...

  5. Android RocooFix热修复动态加载框架介绍

    RocooFix Another hotfix framework 之前的HotFix项目太过简单,也有很多同学用Nuwa遇到很多问题,作者也不再修复,所以重新构建了一套工具. Bugfix 2016 ...

  6. php学习笔记upset函数。

    如果在函数中我们不希望再使用某个变量.可以使用unset()销毁函数, ②在php函数中,我们可以给某些参数赋一个默认初值. ③可以传一个默认的参数. ④php在传递变量的时候,默认是传递值传递,如果 ...

  7. 配置WebLogic的详细步骤

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

  8. 异常-----Can't convert the date to string, because it is not known which parts of the date variable are in use. Use ?date, ?time or ?datetime built-in, or ?string.\u003Cformat> or ?string(format) built-

    1.错误描述 五月 27, 2014 12:07:05 上午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...

  9. 异常-----The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。

    1, 找到新建页面所在的工程名字,然后左键选中,右键弹出功能菜单,选择Build Path,进入配置路径. 2, 在java build path 页面的下选择Libraries栏目(默认选择),点击 ...

  10. Entity Framework 乐观并发处理

    Entity Framework 乐观并发处理 有一段时间没有更新博客了,今天终于有一些时间,和大家讨论一个Entity Framework 乐观并发处理的问题.首先需要说明的是,这里提到的 “并发” ...