codevs 1085
数字游戏 2003年NOIP全国联赛普及组
时间限制: s
空间限制: KB
题目等级 : 黄金 Gold
题解
题目描述 Description
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。 例如,对于下面这圈数字(n=,m=): - 当要求最小值时,((-) mod )×((+) mod )=×=,要求最大值时,为((++) mod )×(- mod )=×=。特别值得注意的是,无论是负数还是正数,对10取模的结果均为非负值。 丁丁请你编写程序帮他赢得这个游戏。 输入描述 Input Description
输入文件第一行有两个整数,n(≤n≤)和m(≤m≤)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。 输出描述 Output Description
输出文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。
样例输入 Sample Input - 样例输出 Sample Output 数据范围及提示 Data Size & Hint
en 分类标签 Tags 点此展开 划分型DP 动态规划 环型DP NOIP全国联赛普及组 大陆地区 2003年
题目
#include<iostream>
#include<cstring>
using namespace std; int n,m;
int minl=0x3f3f,maxl=-;
int fmax[][][],fmin[][][];
int s[]; int mod(int i)
{
if(i>)return i%;
else return (i%+)%;
} int main()
{
cin>>n>>m;
for(int i=;i<=;i++)
for(int j=;j<=;++j)
for(int k=;k<;++k)
fmin[i][j][k]=;
for(int i=;i<=n;++i)
{
cin>>s[i];
s[i+n]=s[i];
}
for(int i=;i<=n*;++i)
s[i]=s[i-]+s[i];
for(int i=;i<=*n;++i)
for(int j=;j<=*n;++j)
fmin[i][j][]=fmax[i][j][]=mod(s[j]-s[i]);
for(int l=;l<=m;++l)
for(int i=;i<=n;++i)
for(int j=i;j<=*n;++j)
for(int k=i+;k<j;++k)
{
fmax[i][j][l]=max(fmax[i][j][l],fmax[i][k][l-]*fmax[k][j][]);
fmin[i][j][l]=min(fmin[i][j][l],fmin[i][k][l-]*fmin[k][j][]);
}
for(int i=;i<=n;++i)
{
minl=min(minl,fmin[i][i+n][m]);
maxl=max(maxl,fmax[i][i+n][m]);
}
cout<<minl<<endl;
cout<<maxl<<endl;
}
代码
是一个典型的划分型DP,递推方程很好写
但是做这个题时要注意几个问题
1、划分的是环,需要断环为链,例如把环1,2,3换成1,2,3,1,2,3
2、维护一个后缀数组,操作方便
3、递推时从前往后推,这点和区间dp截然不同
4、这个题把fmin初始化为0x3f3f3f3f这样很大的数会错误,要换成比较小的数像10000就能过
5、递推时一定要注意边界条件
目前划分型dp还没学习,但是已经见到雏形了,可以与其他dp比较学习
codevs 1085的更多相关文章
- codevs 1085 数字游戏 dp或者暴搜
1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单 ...
- Codevs 1085 数字游戏
1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中 ...
- 数字游戏(codevs 1085)
题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共 ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
随机推荐
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- 学习bash——数据流重定向
一.概述 1. 数据流 定义:以规定顺序被读取一次的数据序列. 分类:标准输入(stdin).标准输出(stdout)和标准错误输出(stderr). 标准输出:指的是命令执行所回传的正确信息. 标准 ...
- 团队作业4——第一次项目冲刺(Alpha版本)-第二篇
项目冲刺——第二阶段 度过了敏捷冲刺,各个成员积极汇报各自的工作.好了,着手下一步规划! Mission 团队成员 任务 郭达 实现PHP后台的答题判分查看正确率 刘德培 编写博客 石浩洋 实现 ...
- 关于如何利用原生js动态给一个空对象添加属性以及属性值
首先,回忆一下,访问对象属性一共有两种方法:点获取法和方括号获取法.而我们最常用的就是点获取法了.但是当我们遇到需要给对象动态添加属性和属性值时,点获取法好像就不太好用了,尤其是我们不知道属性名的时候 ...
- 解决IIS的Server Application Error
问题描述一下: Server Application ErrorThe server has encountered an error while loading an application dur ...
- C#中的SubString()的用法
先看语法: String.SubString(int index,int length) index:开始位置,从0开始 length:你要取的子字符串的长度 例子: using ...
- BZOJ4373 算术天才⑨与等差数列(线段树)
看上去很难维护,考虑找一些必要条件.首先显然最大值-最小值=k*(r-l).然后区间内的数需要模k同余.最后区间内的数两两不同(k=0除外).冷静一下可以发现这些条件组合起来就是充分的了. 考虑怎么维 ...
- 后缀数组 模板题 hdu1403(最长公共(连续)子串)
好气啊,今天没有看懂后缀树和后缀自动机 只能写个后缀数组发泄一下了orz #include <cstdio> #include <cstring> *; int wa[N], ...
- BZOJ3573 [Hnoi2014]米特运输 【贪心】
题目链接 BZOJ3573 题解 题目又臭又长系列 题意:修改尽量少的点权,使得: ①同个节点的所有儿子点权相同 ②任意非叶节点权值等于其儿子权值之和 容易发现一旦任意一个点权值确定,整棵树权值就确定 ...
- Vim使用小记(一)常用操作
By francis_hao Sep 22,2016 vim的功能自然不止如此,这里只是把日常使用频率较高的记录下来,若想了解vim的全部功能可查阅其帮助手册:help,或者查询指定命令的用法: ...