描述

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

格式

输入格式

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

输出格式

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

样例1

样例输入1[复制]

 
4 2
4
3
-1
2

样例输出1[复制]

 
7
81

限制

各个测试点1s,128MB

分析:

  f_max[i][j]表示前i个数,分成j分的最大值

  f_min[i][j]表示前i个数,分成j分的最小值

  下面给出两种转移顺序,第一种是错的,第二种是对的,两者只有顺序不同。。。

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL MOD=;
const LL MAX_N=;
const LL MAX_M=;
LL N,M;
LL a[MAX_N];
LL sum[MAX_N];
LL b[MAX_N];
LL f_max[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最大值
LL f_min[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最小值
void calc();
void move_a(LL);
LL MAX;
LL MIN=0x3f3f3f3f;
int main(){ scanf("%lld%lld",&N,&M);
for(LL i=;i<=N;i++){
scanf("%lld",&a[i]);
b[i]=a[i];
sum[i]=sum[i-]+b[i];
} calc();
for(LL i=;i<=M+;i++){//序列向后退 i个单位
move_a(i);
calc();
} cout<<MIN<<endl<<MAX<<endl; return ;
}
void calc(){
memset(f_min,,sizeof(f_min));
memset(f_max,,sizeof(f_max));
memset(f_min,0x3f3f3f3f,sizeof(f_min));
f_max[][]=;
f_min[][]=;
for(LL i=;i<=N;i++){
f_max[i][]=(sum[i]%MOD+MOD)%MOD;
f_min[i][]=(sum[i]%MOD+MOD)%MOD;
}
/* 这个是错的
for(LL i=2;i<=N;i++){//前 i个数
for(LL j=2;j<=M&&j<=i;j++){//分成 j部分
for(LL k=j-1;k<i;k++){//从 k后截断一次
f_max[i][j]=max(f_max[i][j], (f_max[k][j-1]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
f_min[i][j]=min(f_min[i][j], (f_min[k][j-1]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
}
}
}
*/
//下面这个才是对的
for(LL j=;j<=M;j++){//分成 j部分
for(LL i=j;i<=N;i++){//前 i个数
for(LL k=j-;k<i;k++){//从 k后截断一次
f_max[i][j]=max(f_max[i][j], (f_max[k][j-]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
f_min[i][j]=min(f_min[i][j], (f_min[k][j-]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
}
}
} MAX=max(MAX,f_max[N][M]);
MIN=min(MIN,f_min[N][M]); }
void move_a(LL x){
memset(b,,sizeof(b));
memset(sum,,sizeof(sum));
LL now;
for(LL i=;i<=N;i++){
now=i+x;
if(now>N){
now%=N;
}
b[now]=a[i];
}
for(LL i=;i<=N;i++){
sum[i]=sum[i-]+b[i];
}
}

  

NOIP 数字游戏的更多相关文章

  1. 1085 数字游戏 2003年NOIP全国联赛普及组

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

  2. codevs 1085 数字游戏 dp或者暴搜

    1085 数字游戏 2003年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单 ...

  3. Codevs 1085 数字游戏

    1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中 ...

  4. 1861 奶牛的数字游戏 2006年USACO

    codevs——1861 奶牛的数字游戏 2006年USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Descript ...

  5. C语言猜数字游戏

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

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

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

  7. java 猜数字游戏

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

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

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

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

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

随机推荐

  1. Codeforces 448 C. Painting Fence

    递归.分治. . . C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input ...

  2. CentOS 7安装与配置jdk-8u162

    一.下载jdk-8u162版本 jdk-8u162-linux-x64.rpm 二.上传jdk到centos下 上传完后的文件如下,文件只有读写权限,没有执行权限 使用如下命令授权,如果文件已经有了执 ...

  3. iOS-tableView本地动画刷新

    比如:就拿删除tableView中一个Cell为例子. // XXXTableViewCellDelegate - (void)tapDeleteHelloUser:(CJHelloTableView ...

  4. linux下安装oracle sqlplus以及imp、exp工具

    一.下载oracle 11g sqlplus软件 linux 64位操作系统,oracle安装包地址 http://www.oracle.com/technetwork/topics/linuxx86 ...

  5. HDU 3572(Task Schedule) ISAP做法

    题目链接:传送门 题目大意:有n个任务,m个机器.每个机器最早在 Si 天开始,最晚在 Ei 天结束,需要 Pi 天完成.可以中途换机器做,也可以中途打断不做,过后再做   只要在规定时间内都行.每个 ...

  6. 【BZOJ4503】两个串 FFT

    [BZOJ4503]两个串 Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有“?”字符,这个字符可以匹配任何字 ...

  7. :nth- 从1开始计数,其他如:eq()、 index()从0开始计数

    因为jQuery的实现:nth-是严格来自CSS规范,n值是“1-indexed”,也就是说,从1开始计数. 对于所有其他选择器表达式比如:eq() 或 :even ,jQuery遵循JavaScri ...

  8. learnyou 相关网站

    http://learnyouahaskell.com/ http://learnyouahaskell-zh-tw.csie.org/ http://learnyousomeerlang.com/

  9. Android REST webservice 类

    App与后台交互,后台使用的是Jersey RESTful 服务.在APP端使用Android 内部集成的HttpClient接口,无需引入第三方jar包, import org.apache.htt ...

  10. 看用Tornado如何自定义实现表单验证

    我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单验证功能,但是对于Tornado而言, ...