SSL 1028——数字游戏
来源:互联网 发布:淘宝怎么增加店铺类目 编辑:程序博客网 时间:2024/06/07 21:03
Description
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共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行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。
Output
输出有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。
Sample Input
4 2
4
3
-1
2
Sample Output
7
81
这道题是典型的环形DP,我们设f[i][j]为前i个数分成j份得到的最大值,g[i][j]表示前i个数分成j份获得的最小值。于是状态转移方程很容易推出来:
f[i][j]=max(f[i][j],f[k][j-1]*(((sum[i]-sum[k])%10+10)%10));
g[i][j]=min(g[i][j],g[k][j-1]*(((sum[i]-sum[k])%10+10)%10));
我们枚举一个k端点在1~i-1之间,表示这k个数分成j-1份之后剩下的k+1到i分成一份,所获得的价值用前缀和处理即可。
(注意要%10)
代码如下:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=205;int Min,Max,n,sum[maxn],num[maxn],f[maxn][15],g[maxn][15],m;void DP(int a[]){ for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]; for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) f[i][j]=0,g[i][j]=0x5f; for(int i=1;i<=n;i++) f[i][1]=g[i][1]=(sum[i]%10+10)%10; for(int j=2;j<=m;j++) for(int i=j;i<=n;i++) for(int k=j-1;k<=i-1;k++) { f[i][j]=max(f[i][j],f[k][j-1]*(((sum[i]-sum[k])%10+10)%10)); g[i][j]=min(g[i][j],g[k][j-1]*(((sum[i]-sum[k])%10+10)%10)); } Min=min(Min,g[n][m]); Max=max(Max,f[n][m]);}int main(){ Min=0x5f;Max=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&num[i]); num[i+n]=num[i]; } for(int i=0;i<n;i++) DP(num+i); printf("%d\n%d",Min,Max); return 0;}
- SSL 1028——数字游戏
- SSL 1653——数字游戏
- 数字游戏-SSL 1653
- SSL 1644——取数字问题
- SSL JudgeOnline 1786——麻将游戏
- SSL 2293——暗黑游戏
- FZU——数字游戏
- 猜数字游戏——复杂版
- fzu——Problem 2089 数字游戏
- 任务1——猜数字游戏
- 智力题——24.数字额头游戏
- 第三十九课——数字游戏
- 破解数字游戏 —— 概率篇
- python入门——猜数字游戏
- Python入门——猜数字游戏
- 蓝桥杯历届试题——数字游戏
- J2SE小项目—猜数字游戏
- J2SE小项目—2048数字游戏
- hihocoder 1185(tarjan缩点)
- 基于 Django1.10 文档的深入学习(10)—— django.contrib.auth 之 User model
- SIFT特征点描述子生成(生成特征向量)
- 2017年阿里巴巴实习生招聘笔试
- Netty 协议开发
- SSL 1028——数字游戏
- 表达式求值(数据结构-栈的应用 )
- Windows安装Python组件Scrapy报错的解决方案
- 2017阿里研发工程师C/C++实习生招聘笔试题
- 4.26
- Android源码分析—哈希表
- 关于Android开发求职,我想说有点尿性。
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器