NOIP 数字游戏
描述
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。
格式
输入格式
输入文件第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。
输出格式
输出文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。
限制
各个测试点1s,128MB
分析:
f_max[i][j]表示前i个数,分成j分的最大值
f_min[i][j]表示前i个数,分成j分的最小值
下面给出两种转移顺序,第一种是错的,第二种是对的,两者只有顺序不同。。。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL MOD=;
const LL MAX_N=;
const LL MAX_M=;
LL N,M;
LL a[MAX_N];
LL sum[MAX_N];
LL b[MAX_N];
LL f_max[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最大值
LL f_min[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最小值
void calc();
void move_a(LL);
LL MAX;
LL MIN=0x3f3f3f3f;
int main(){ scanf("%lld%lld",&N,&M);
for(LL i=;i<=N;i++){
scanf("%lld",&a[i]);
b[i]=a[i];
sum[i]=sum[i-]+b[i];
} calc();
for(LL i=;i<=M+;i++){//序列向后退 i个单位
move_a(i);
calc();
} cout<<MIN<<endl<<MAX<<endl; return ;
}
void calc(){
memset(f_min,,sizeof(f_min));
memset(f_max,,sizeof(f_max));
memset(f_min,0x3f3f3f3f,sizeof(f_min));
f_max[][]=;
f_min[][]=;
for(LL i=;i<=N;i++){
f_max[i][]=(sum[i]%MOD+MOD)%MOD;
f_min[i][]=(sum[i]%MOD+MOD)%MOD;
}
/* 这个是错的
for(LL i=2;i<=N;i++){//前 i个数
for(LL j=2;j<=M&&j<=i;j++){//分成 j部分
for(LL k=j-1;k<i;k++){//从 k后截断一次
f_max[i][j]=max(f_max[i][j], (f_max[k][j-1]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
f_min[i][j]=min(f_min[i][j], (f_min[k][j-1]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
}
}
}
*/
//下面这个才是对的
for(LL j=;j<=M;j++){//分成 j部分
for(LL i=j;i<=N;i++){//前 i个数
for(LL k=j-;k<i;k++){//从 k后截断一次
f_max[i][j]=max(f_max[i][j], (f_max[k][j-]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
f_min[i][j]=min(f_min[i][j], (f_min[k][j-]*(((sum[i]-sum[k])%MOD+MOD)%MOD)));
}
}
} MAX=max(MAX,f_max[N][M]);
MIN=min(MIN,f_min[N][M]); }
void move_a(LL x){
memset(b,,sizeof(b));
memset(sum,,sizeof(sum));
LL now;
for(LL i=;i<=N;i++){
now=i+x;
if(now>N){
now%=N;
}
b[now]=a[i];
}
for(LL i=;i<=N;i++){
sum[i]=sum[i-]+b[i];
}
}
NOIP 数字游戏的更多相关文章
- 1085 数字游戏 2003年NOIP全国联赛普及组
丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分 ...
- codevs 1085 数字游戏 dp或者暴搜
1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单 ...
- Codevs 1085 数字游戏
1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中 ...
- 1861 奶牛的数字游戏 2006年USACO
codevs——1861 奶牛的数字游戏 2006年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Descript ...
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- java 猜数字游戏
作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
随机推荐
- .net webapi项目跨域问题及解决方案
问题: 1.项目完成,部署到不同的iis版本上,跨域访问有的通有的不通 解决办法: 1.将复杂请求改为简单请求 2.代码中去掉所有跨域设置,配置中添加或修改节点 <system.webServe ...
- python数字类型
Numbers >>> 5+4 9 >>> (6/2)+5 8.0 >>> >>> print(17/3) 5.66666666 ...
- 65、TextView 字体设置不同颜色 --- 未完
mTextView.setText(Html.fromHtml("教练评论" + "<font color='#b0b0b0'>" + " ...
- memcache的内存管理机制
Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题Memcache的存储涉及到slab,page,chunk三 ...
- Codeforces Round #372 (Div. 1) B. Complete The Graph
题目链接:传送门 题目大意:给你一副无向图,边有权值,初始权值>=0,若权值==0,则需要把它变为一个正整数(不超过1e18),现在问你有没有一种方法, 使图中的边权值都变为正整数的时候,从 S ...
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- wcf 开发 1
1.创建wcf应用程序 2.生成服务,启动 3.使用工具生成 文件如下: 4.新增加winform程序项目,并添加文件 service1.cs 修改app.config 5.代码调用 private ...
- Windows数据库定时备份
首先打开:任务计划程序 右键任务计划程序库,选择创建基本任务 然后即可以按照实际情况逐步进行 直到启动程序--浏览(程序或脚本)时,这里本人导入的是backup.bat文件,文件内容为 @echo 设 ...
- 【opencv安裝】ubuntu16 opencv安装+测试
ubuntu16.04 install opencv2.4 to python2 and c++ 四大主流库比较: 对OpenCV的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善, ...
- go——结构体(二)
Go语言是一种静态类型的编程语言.这意味着,编译器需要在编译时知晓程序里每个值的类型. 如果提前知道类型信息,编译器就可以确保程序合理的使用值. 这有助于减少潜在的内存异常和bug,并且使编译器有机会 ...