洛谷P1043 数字游戏
时间:2022-05-08
本文章向大家介绍洛谷P1043 数字游戏,主要内容包括题目描述、输入输出格式、输入输出样例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
题目描述
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共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取模的结果均为非负值。
丁丁请你编写程序帮他赢得这个游戏。
输入输出格式
输入格式:
输入文件第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。
输出格式:
输出文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。
输入输出样例
输入样例#1:
4 2
4
3
-1
2
输出样例#1:
7
81
DpMin[i][j][k]表示i到j中切了k次的最小值
DpMax表示最大值
转移的时候枚举断点
左右两边相乘
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=2001;
const int INF=0x7fffff;
inline char nc()
{
static char buf[MAXN],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
char c=nc();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=nc();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=nc();}
return x*f;
}
int DpMin[101][101][11];
int DpMax[101][101][11];
int a[MAXN];
int Query(int a)
{
return ((a%10)+10)%10;
}
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
int n=read(),m=read();
for(int i=1;i<=n;i++) a[i]=read(),a[i+n]=a[i];
for(int i=1;i<=2*n;i++) a[i]+=a[i-1];
for(int l=1;l<=2*n;l++)
for(int r=l;r<=2*n;r++)
DpMin[l][r][1]=DpMax[l][r][1]=Query(a[r]-a[l-1]);
for(int i=2;i<=m;i++)
for(int l=1;l<=2*n;l++)
for(int r=l+i-1;r<=2*n;r++)
DpMin[l][r][i]=INF;
for(int i=2;i<=m;i++)//已经切了k次
for(int l=1;l<=2*n;l++)
for(int r=l+i-1;r<=2*n;r++)
for(int k=l+i-2;k<r;k++)
{
DpMin[l][r][i]=min(DpMin[l][r][i],DpMin[l][k][i-1]*Query(a[r]-a[k]));
DpMax[l][r][i]=max(DpMax[l][r][i],DpMax[l][k][i-1]*Query(a[r]-a[k]));
}
int AnsMax=0,AnsMin=INF;
for(int i=1;i<=n;i++)
AnsMax=max(AnsMax,DpMax[i][i+n-1][m]),
AnsMin=min(AnsMin,DpMin[i][i+n-1][m]);
printf("%dn%d",AnsMin,AnsMax);
return 0;
}
- ImageView的scaletype属性
- 云计算和虚拟机基础梳理
- Python-Socket
- 用Sysctl 调整Linux操作系统的性能
- python-基础案例
- css3 3d变换和动画——回顾
- eclipse中关联文件设置方法
- Kubernetes服务网格(第8部分):Linkerd作为入口控制器
- 使用RestSharp 库消费Restful Service
- Python-面向对像及其他
- 基于MongoDB GridFS的图片存储
- css3 过渡和2d变换——回顾
- Microsoft 防跨站点脚本库AntiXSS Library v4.2.1
- Compilify——让你在浏览器中编译.NET代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【疑难杂症】解决-TensorFlow “FutureWarning: Conversion of the”
- [Deep-Learning-with-Python] 文本序列中的深度学习
- TN-SCUI2020挑战赛详细讲解
- QSignalMapper使用以及替换方法
- 对于组件的可重用性,大佬给出来6个级别的见解,一起过目一下!
- 多个线程为了同个资源打起架来了,该如何让他们安分?
- 实战|记录一次渗透测试项目
- SVN工具分析
- 客服MM被投诉说下单耗时很长,老板下令必须控制在1秒以内
- 介绍两个刷 SQL 题的网站
- Spring MVC 你必须关注点
- 微信小程序开发实战(12):滑杆组件(slider)和form组件
- pandas按照指定的列排序、paste命令指定分隔符、ggplot2添加拟合曲线
- 连连看
- 交叉验证