描述

丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共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. python3----练习题(冒泡排序)

    冒泡,原理是临近的数字两两进行比较,按照从小到大的顺序进行交换,这样交换一次之后,最大的数字就被交换到了最后一位. li = [33, 2, 10, 1] for j in range(1, len( ...

  2. 优化phpstorm运行卡顿问题

    在PHPSTORM中点击导航菜单:Help -> Edit Custom VM Options 如果是第一次点击,会提示是否新建配置文件,点击“yse” 在弹出的编辑框末尾加上以下配置 -Daw ...

  3. JB开发之三 [jailbreak,越狱技术积累]

    很兴奋,我开始了进行JB的开发 1.杀死当前的APP [(SpringBoard *)[UIApplicationsharedApplication] _killThermallyActiveAppl ...

  4. IOS控件:计算文字长度(UITextField,UILabel对象 和 IBAction)

    #import <UIKit/UIKit.h> // UIViewController类为程序提供了基本的视图管理模块 @interface NavControllerViewContro ...

  5. Go开发的体会【转】

    摘自 http://studygolang.com/articles/5069 再次表示感谢,学习了.

  6. homebrew常用指令

    其它Homebrew指令: brew list   —列出已安装的软件 brew update   —更新Homebrew brew home  *—用浏览器打开 brew info   *—显示软件 ...

  7. 【BZOJ4665】小w的喜糖 容斥+组合数

    [BZOJ4665]小w的喜糖 Description 废话不多说,反正小w要发喜糖啦!! 小w一共买了n块喜糖,发给了n个人,每个喜糖有一个种类.这时,小w突发奇想,如果这n个人相互交换手中的糖,那 ...

  8. Mac中pico编辑器的使用方法

    Pico是一个由华盛顿大学(University of Washington)计算与通讯研究所(Computing and Communications Group)编写并维护的文本编辑程序,在多个版 ...

  9. Java——BeanUtils基本用法

    为了操作JavaBean的属性,sun公司自己写了一套内省的api(在Java.beans.*)中,但是我们发现操作起来还是比较复杂的,所以apache公司就自己写了一套api替代了它,大大方便了开发 ...

  10. JD-GUI

    JD-GUI http://jd.benow.ca/ JD-GUI可到官網直接下載.官網除了JD-GUI之外,另提供了Eclipse(JD-Eclipse)和IntelliJ(JD-IntelliJ) ...