博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cogs 983. [NOIP2003] 数字游戏
阅读量:4646 次
发布时间:2019-06-09

本文共 1494 字,大约阅读时间需要 4 分钟。

★☆   输入文件:numgame.in   输出文件:numgame.out   简单对比

时间限制:1 s   内存限制:128 MB

题目描述

丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共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行每行有个整数,其绝对值不大于10^4,按顺序给出圈中的数字,首尾相接。

输出格式

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

【输入样例】
4 243-12
【输出样例】
781 思路:断环成链,记录前缀和。s[i][j][k]表示在区间i-j之间分为k段的最小值,b[i][j][k]表示在区间i-j之间分为k段的最大值。
#include
#include
#include
#define oo 2147483647using namespace std;int B[101][101][11],S[101][101][11]; int n,m; int a[101];int mod(int a){ return ((a%10)+10)%10;}int main(){ freopen("numgame.in","r",stdin); freopen("numgame.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); 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++) B[l][r][1]=S[l][r][1]=mod(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++) S[l][r][i]=oo; 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++) for(int k=l+i-2;k

 

 

转载于:https://www.cnblogs.com/cangT-Tlan/p/7435581.html

你可能感兴趣的文章
免费图标:来自Samuray的免费电视/电影相关图标
查看>>
GitHub万星项目:黑客成长技术清单
查看>>
笔试题:倒置字符串
查看>>
postgresql的启停和创建
查看>>
poj 1149 PIGS 最大流
查看>>
shortcut in windows
查看>>
ASPX页面包含inc文件、用户控件、普通html文件
查看>>
九度OJ 1135:字符串排序 (排序)
查看>>
C6678 PCIe boot default configuration value
查看>>
函数模板
查看>>
java序列化
查看>>
sizeof运算符
查看>>
α训练营——项目任务--界面
查看>>
DAY1-作业
查看>>
关于浮动与清除浮动
查看>>
mongoose中的versionKey
查看>>
java ->Arrays类
查看>>
generate failed: Cannot resolve classpath entry: mysql-connector-java-5.1.38.jar
查看>>
PHP安装posix、pctl扩展
查看>>
window.requestAnimationFrame()
查看>>