描述

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

格式

输入格式

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

输出格式

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

样例1

样例输入1[复制]

 
  1. 4 2
  2. 4
  3. 3
  4. -1
  5. 2

样例输出1[复制]

 
  1. 7
  2. 81

限制

各个测试点1s,128MB

分析:

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

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. typedef long long LL;
  9. const LL MOD=;
  10. const LL MAX_N=;
  11. const LL MAX_M=;
  12. LL N,M;
  13. LL a[MAX_N];
  14. LL sum[MAX_N];
  15. LL b[MAX_N];
  16. LL f_max[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最大值
  17. LL f_min[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最小值
  18. void calc();
  19. void move_a(LL);
  20. LL MAX;
  21. LL MIN=0x3f3f3f3f;
  22. int main(){
  23.  
  24. scanf("%lld%lld",&N,&M);
  25. for(LL i=;i<=N;i++){
  26. scanf("%lld",&a[i]);
  27. b[i]=a[i];
  28. sum[i]=sum[i-]+b[i];
  29. }
  30.  
  31. calc();
  32. for(LL i=;i<=M+;i++){//序列向后退 i个单位
  33. move_a(i);
  34. calc();
  35. }
  36.  
  37. cout<<MIN<<endl<<MAX<<endl;
  38.  
  39. return ;
  40. }
  41. void calc(){
  42. memset(f_min,,sizeof(f_min));
  43. memset(f_max,,sizeof(f_max));
  44. memset(f_min,0x3f3f3f3f,sizeof(f_min));
  45. f_max[][]=;
  46. f_min[][]=;
  47. for(LL i=;i<=N;i++){
  48. f_max[i][]=(sum[i]%MOD+MOD)%MOD;
  49. f_min[i][]=(sum[i]%MOD+MOD)%MOD;
  50. }
  51. /* 这个是错的
  52. for(LL i=2;i<=N;i++){//前 i个数
  53. for(LL j=2;j<=M&&j<=i;j++){//分成 j部分
  54. for(LL k=j-1;k<i;k++){//从 k后截断一次
  55. f_max[i][j]=max(f_max[i][j], (f_max[k][j-1]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
  56. f_min[i][j]=min(f_min[i][j], (f_min[k][j-1]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
  57. }
  58. }
  59. }
  60. */
  61. //下面这个才是对的
  62. for(LL j=;j<=M;j++){//分成 j部分
  63. for(LL i=j;i<=N;i++){//前 i个数
  64. for(LL k=j-;k<i;k++){//从 k后截断一次
  65. f_max[i][j]=max(f_max[i][j], (f_max[k][j-]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
  66. f_min[i][j]=min(f_min[i][j], (f_min[k][j-]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
  67. }
  68. }
  69. }
  70.  
  71. MAX=max(MAX,f_max[N][M]);
  72. MIN=min(MIN,f_min[N][M]);
  73.  
  74. }
  75. void move_a(LL x){
  76. memset(b,,sizeof(b));
  77. memset(sum,,sizeof(sum));
  78. LL now;
  79. for(LL i=;i<=N;i++){
  80. now=i+x;
  81. if(now>N){
  82. now%=N;
  83. }
  84. b[now]=a[i];
  85. }
  86. for(LL i=;i<=N;i++){
  87. sum[i]=sum[i-]+b[i];
  88. }
  89. }

  

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. 你一定喜欢看的 Webpack 2.× 入门实战

    from:https://www.jianshu.com/p/b83a251d53db?utm_campaign=maleskine&utm_content=note&utm_medi ...

  2. iOS 开发之--打测试包的时候报错的解决方法

    在打测试包的时候,一直出现一个报错,解决方法如下: 方法一: 描述文件所在目录是:~/Library/MobileDevice/Provisioning\ Profiles/,可以直接前往文件夹,把所 ...

  3. null!= xxx 和 xxx!=null有什么区别?

    从意义上将没有区别,从编程规范上讲,第一种写法是为了防止写成:null = xxx

  4. <pre>标签让<textarea>标签的内容原样输出

    当通过<textarea>插数据进数据的库,取出来后都变成一行变成,用这个<pre>标签能原样输入插入时的格式. 当时要对<pre>加一些CSS样式才行啦. 以下为 ...

  5. 微信小程序入门学习-- 简易Demo:计算器

    简单学习下微信小程序 官网 简易教程 · 小程序 https://mp.weixin.qq.com/debug/wxadoc/dev/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行 ...

  6. Web移动端使用localStorage缓存Js和css文件 | 强制不要缓存

    1.尽量不把js放在onload事件中,而是放在由用户主动触发的事件 2.加时间戳,时间不同则会加载js而非使用缓存 强制不要缓存: <meta http-equiv=Cache-Control ...

  7. 所有版本chromedriver下载

     所有版本chromedriver下载 http://chromedriver.storage.googleapis.com/index.html

  8. 巨蟒python全栈开发flask2

    内容回顾: 上节回顾: Flask .response 三剑客: render_template 模板 redirect 重定向 - URL地址 "" 字符串 HTTPRespon ...

  9. <2014 05 10> Android平台开发攻略

    1.标准SDK开发: IDE: Eclipse Netbeans Language: Java 2.标准NDK+SDK开发: IDE: Eclipse Language: Java(JNI) C/C+ ...

  10. WebService SOAP WSDL UDDI 使用php的curl、PHP5的SoapClient实现同步

    一.基本名词 WebService: WebService是一种跨编程语言和跨操作系统平台的远程调用技术.不同系统,不同语言的数据交换方法都是不同的,这就导致在不同系统,不同语言之间传递数据很麻烦,基 ...