数字游戏  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的更多相关文章

  1. codevs 1085 数字游戏 dp或者暴搜

    1085 数字游戏 2003年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单 ...

  2. Codevs 1085 数字游戏

    1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中 ...

  3. 数字游戏(codevs 1085)

    题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共 ...

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. SQL 基础笔记(三):约束

    个人笔记不保证正确. 数据类型是限制我们可以在表里存储什么数据的一种方法.不过,对于许多应用来说, 这种限制实在是太粗糙了.比如,一个包含产品价格的字段应该只接受正数. 但是没有哪种标准数据类型只接受 ...

  2. 【iOS开发】动态添加子视图 UIView 的正确方法

    很多时候哥比较喜欢用代码添加视图,特别是要同时加很多UIView时,而且跟 xib 比起来代码更容易管理,在多人的项目中代码不容易 conflict. 但小牛哥最近发现很多新人都不太清楚正确的使用方法 ...

  3. Android—基于OpenCV+Android实现人脸检测

    导读 OpenCV 是一个开源的跨平台计算机视觉库, 采C++语言编写,实现了图像处理和计算机视觉方面的很多通用算法,同时也提供对Python,Java,Android等的支持,这里利用Android ...

  4. C语言数组作业总结

    数组作业总结 评分注意事项. 注意用Markdown语法排版,尤其注意伪代码用代码符号渲染.用符号 ``` 生成代码块. 变量名不规范,没注释,没缩进,括号不对齐,倒扣5分. PTA上写的所有代码务必 ...

  5. PTA循环,函数,数组作业

    PTA循环实验作业 题目一:统计素数并求和 ### 1.PTA提交列表 2.设计思路(+流程图) 先定义变量(包含素数区间,循环次数,除数,素数个数记录和和的记录) 输入范围 一重循环:循环提取自然数 ...

  6. JAVA高并发处理------多线程

    线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. 分析:当多个线程访问myThread的run方法时,以排队的方式进行处 ...

  7. 用AngularJS操作DOM

    在angular中使用第三方插件时最好都封装到指令(directives)中去,DOM操作也最好都解构到指令中. <!DOCTYPE html> <html lang="e ...

  8. 【BZOJ3887】【Usaco2015 Jan】Grass Cownoisseur Tarjan+Spfa

    我们可以看出这个东西可以缩点成DAG,因为我们在所称的点里用特技的话,要么没用,要么削弱自己对点的收割能力与边的联通权,所以我们缩完点之后在图上枚举反向的变,因为我们只可能反向一条边,而且我们知道在这 ...

  9. CentOS下SVN服务器的搭建使用

    转载自:http://ailurus.blog.51cto.com/4814469/1168481 SVN作为新一代代码版本管理工具,有很多优点,管理方便,逻辑明确,安全性高,代码一致性高.SVN数据 ...

  10. dbcp重连问题排查

    转载自:http://lc87624.iteye.com/blog/1734089 使用数据库连接池时,免不了会遇到断网.数据库挂掉等异常状况,当网络或数据库恢复时,若无法恢复连接池中的连接,那必然会 ...