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

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

2

4                           -1

3

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

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

4 2

4

3

-1

2

样例输出 Sample Output

7

81

数据范围及提示 Data Size & Hint

en

  1. #include <iostream>
  2. #include <string>
  3. #include <cstdio>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <deque>
  7. #include <map>
  8. #include <stack>
  9. #include <cstring>
  10. using namespace std;
  11. typedef long long LL;
  12. #define INF 0x3f3f3f3f
  13. #define MAXN 200 + 99
  14. /*i
  15. 预处理出a[i][j] i到j相加的和
  16. dp[i][j] 分了i段 在前j个元素
  17. 枚举当前分的段数
  18. dp[i][j] = max(dp[i-1][m] * a[m+1][j], dp[i][j])
  19. */
  20. int n, m;
  21. int val[MAXN];
  22. int dp1[MAXN][MAXN];
  23. int dp2[MAXN][MAXN];
  24. int a[MAXN][MAXN];
  25. int cal(int i, int j)
  26. {
  27. int ret = ;
  28. for (int t = i; t <= j; t++)
  29. {
  30. ret += (val[t] + ) % ;
  31. }
  32. return ( ret + ) % ;
  33. }
  34. int main()
  35. {
  36. ios::sync_with_stdio();
  37. cin >> n >> m;
  38. for (int i = ; i <= n; i++)
  39. cin >> val[i], val[i + n] = val[i];
  40. for (int i = ; i <= * n; i++)
  41. {
  42. for (int j = i; j <= * n; j++)
  43. {
  44. a[i][j] = cal(i, j);
  45. }
  46. }
  47. int ans1 = -, ans2 = 0x7fffffff;
  48. for (int t = ; t < n; t++)
  49. {
  50. memset(dp1, , sizeof(dp1));
  51. memset(dp2, INF, sizeof(dp2));
  52. for (int i = ; i <= n; i++)
  53. dp1[][i] = dp2[][i] = a[ + t][i + t];
  54. for (int i = ; i <= n; i++)
  55. {
  56. for (int j = i; j <= n; j++)
  57. {
  58. for (int m = i - ; m < j; m++)
  59. {
  60. dp1[i][j] = max(dp1[i][j], dp1[i - ][m] * a[t + m + ][t + j]);
  61. dp2[i][j] = min(dp2[i][j], dp2[i - ][m] * a[t + m + ][t + j]);
  62. }
  63. }
  64. }
  65. ans1 = max(dp1[m][n], ans1);
  66. ans2 = min(dp2[m][n], ans2);
  67. }
  68.  
  69. cout << ans2 << endl << ans1 << endl;
  70.  
  71. }

1085 数字游戏 2003年NOIP全国联赛普及组的更多相关文章

  1. 1126 数字统计 2010年NOIP全国联赛普及组

    1126 数字统计 2010年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver         题目描述 Description 请统计某个 ...

  2. 三国游戏 2010年NOIP全国联赛普及组

    题目描述 Description 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有N 位武将(N 为偶数且不小 ...

  3. 数字统计(2010年NOIP全国联赛普及组)

    题目描述 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数. 比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出 现 1 次 ...

  4. codevs 1126 数字统计 2010年NOIP全国联赛普及组 x

    题目描述 Description 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21 ...

  5. codevs 1086 栈 2003年NOIP全国联赛普及组

    题目描述 Description 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). ...

  6. Codevs 1198 国王游戏 2012年NOIP全国联赛提高组

    1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...

  7. 3285 转圈游戏 2013年NOIP全国联赛提高组

    3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description n 个小伙伴 ...

  8. 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)

    矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description [问题描述]帅帅经常跟 ...

  9. Codevs 1140 Jam的计数法 2006年NOIP全国联赛普及组

    1140 Jam的计数法 2006年NOIP全国联赛普及组 传送门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Jam是个喜欢标 ...

随机推荐

  1. javascript中函数的四种调用模式详解

    介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已.函数:如果一个函数与任何对象关系,就称该函数为函数.方法:如果一个函数作为一个对象属性存在,我们 ...

  2. System.Lazy<T>延迟加载

    在很多情况下,有些对象需要在使用时加载或根据逻辑动态加载.有些情况如果不延迟加载,可能会影响效率甚至抛出Timeout Exception.如网络操作.数据库操作.文件IO操作 直接上代码,方便我们理 ...

  3. 【C++】模板简述(六):总结

    1.模板技术是泛型编程的基础.([C++]模板简述(一):模板的引入) 2.模板被编译两次,因而给分离编译造成一些麻烦.([C++]模板简述(二):函数模板.[C++]模板简述(四):模板为什么不支持 ...

  4. java规范与标准?

    所谓规范,即指由很多人同时遵守的行为或理论. java的规范并不是指其中一种,而是有很多种,比如java编码规范,java命名规范,java虚拟机规范等等,甚至于一个编码规范都有很多种,不同的公司.组 ...

  5. Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'

    Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>' 点开错误的文 ...

  6. 06CSS列表

    CSS列表 列表样式——list-style-type list-style-type:<属性值> disc   黑圆点 circle 空心圆点 square   小黑方块 decimal ...

  7. 【C语言】控制台窗口图形界面编程(五):文本移动

    目录 00. 目录 01. CHAR_INFO结构 02. ScrollConsoleScreenBuffer函数 03. 程序示例 04. 官方参考程序 00. 目录 01. CHAR_INFO结构 ...

  8. No-8.循环

    01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 —— 从上向下,顺序执行代码 分支 —— 根据条件判断,决定执行代码的 分支 循环 —— 让 特定代码 重复 执行 02. while ...

  9. 笔试算法题(53):四种基本排序方法的性能特征(Selection,Insertion,Bubble,Shell)

    四种基本算法概述: 基本排序:选择,插入,冒泡,希尔.上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件.前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成 ...

  10. [Python3网络爬虫开发实战] 1.9.3-Scrapyd-Client的安装

    在将Scrapy代码部署到远程Scrapyd的时候,第一步就是要将代码打包为EGG文件,其次需要将EGG文件上传到远程主机.这个过程如果用程序来实现,也是完全可以的,但是我们并不需要做这些工作,因为S ...