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/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
随机推荐
- UVA 11884 A Shooting Game(记忆化搜索)
A and B are playing a shooting game on a battlefield consisting of square-shaped unit blocks. The bl ...
- 打包成exe程序
https://blog.csdn.net/harvic880925/article/details/27675073 当然针对这种exe文件,也可以解压出来得到具体的debug文件夹下的内容.
- C++关于堆的函数
建立堆 make_heap(_First, _Last, _Comp) 默认是建立最大堆的.对int类型,可以在第三个参数传入greater<int>()得到最小堆. 在堆中添加数据 ...
- CSS3基础选择器
/*选择器分组:多个选择器使用同一个样式*/ h1,h2,a{ color: blue; } strong{ color: aquamarine; } /*选择器继承:body中未设置样式的会使用继承 ...
- ns统计使用资源的SNMP OID
ns统计使用资源的SNMP OID > add snmp manager 192.168.195.1 > add snmp community public ALL > add sn ...
- Ubuntu下使用mysqli-connect连接mysql时报错:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
LNMP安装好后,写了个index.php文件,里面的内容很简单,就是想测试php与mysql的通信是否正常,代码如下: <?php $host = 'localhost'; $user = ' ...
- codeforces 110E Lucky Tree
传送门:https://codeforces.com/contest/110/problem/E 题意:给你一颗树,节点与节点之间的边有一个边权,定义只由4和7组成的数字是幸运数字,现在要你求一共有多 ...
- ZooKeeper Watcher注意事项
zookeeper watch的定义如下:watch事件是一次性触发器,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher. 需要注意三点: 1.一次性触发器 c ...
- docker公司测试环境搭建总结
1.防火墙转发规则: [root@docker ~]# firewall-cmd --list-allpublic (active) target: default icmp-block-invers ...
- Eclipse中的Web项目自动部署到Tomcat的webapp目录下
Eclipse中的Web项目自动部署到Tomcat 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写 ...