数字游戏(NOIP 2003 PJT2)

一 原始数据处理
1.输入数据得到a[1]~a[n],复制扩展a[n+1]~a[2*n],以便处理不同点为起点出发。 cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i+n]=a[i];
}
2.计算前缀和
sum[1]=a[1];
for(int i=2;i<=2*n;i++) sum[i]=sum[i-1]+a[i];
3.除余计算函数
int mod10(int k)
{
return (k%10+10)%10;
}
二 dp数组定义及转移方程
1 dp定义
dpma [i][j][m] 表示i为起点j为终点,划分m份的最大值;
dpmi [i][j][m] 表示i为起点j为终点,划分m份的最小值;
2 根据定义初始化
dpma [i][j][1];
dpmi [i][j][1];
for(int i=1;i<=2*n;i++)
{
for (int j=i;j<=2*n;j++)
{
dpmi[i][j][1]=dpma[i][j][1]=mod10(sum[j]-sum[i-1]);
for(int len=2;len<=m;len++)
{
dpmi[i][j][len]=2e9;
dpma[i][j][len]=0;
}
}
}
3转移方程: dpma[i][j][len]=max(1ll*dpma[i][mid][num]*dpma[mid+1][j][len-num],1ll*dpma[i][j][len]));
dpmi[i][j][len]=min(1ll*dpmi[i][mid][num]*dpmi[mid+1][j][len-num],1ll*dpmi[i][j][len])); len 范围[2,m],最外层循环,用来遍历所有分的份数(因为份数为1的都已初始化)
num是分堆数量取值范围[1,len-1],用来遍历len堆的方法,len=5,那么num可分成1,4;2,3;3,2;4,1;
i的范围[1,2*n],j的范围[i,2*n],用来遍历起始点。
mid为i~j之间的划分点 ,mid 取值范围[i,j-1]
举例说明mid的必要性,样例a[]={2,-1,3,4},
求dp[1][3][2],
存在{2},{-1,3}和{2,-1},{3}按照划mid分点不同存在两种情况,
应比较dp[1][1][1]*dp[2][3][1]和dp[1][2][1]*dp[3][3][1]两者取大
防止dpmi超int界,乘1ll转化为长整型 4 求最大最小值
int maxans=0,minans=2e9;
for(int i=1;i<=n;i++)
{
maxans=max(dpma[i][i+n-1][m],maxans);
minans=min(dpmi[i][i+n-1][m],minans);
}
代码:
1 #include<bits/stdc++.h>
2 #define LL long long
3 using namespace std;
4 int dpmi[200][200][200],dpma[200][200][200]={0};
5 int n,m,a[200]={0},sum[200]={0};
6 int mod10(int n)
7 {
8 return (n%10+10)%10;
9 }
10
11 int main()
12 {
13 // freopen("1.in","r",stdin);
14 // freopen("1.out","w",stdout);
15 cin>>n>>m;
16 for(int i=1;i<=n;i++)
17 {
18 scanf("%d",&a[i]);
19 a[i+n]=a[i];
20 }
21
22 sum[1]=a[1];
23 for(int i=2;i<=2*n;i++) sum[i]=sum[i-1]+a[i];
24
25 for(int i=1;i<=2*n;i++)
26 {
27 for(int j=i;j<=2*n;j++)
28 {
29 dpmi[i][j][1]=dpma[i][j][1]=mod10(sum[j]-sum[i-1]);
30 for(int len=2;len<=m;len++)
31 {
32 dpmi[i][j][len]=2e9;
33 dpma[i][j][len]=-1;
34 }
35 }
36 }
37
38
39 for(int len=2;len<=m;len++)
40 {
41 for(int num=1;num<len;num++)
42 {
43 for(int i=1;i<=2*n;i++)
44 {
45 for(int j=i;j<=2*n;j++)
46 {
47 for(int mid=i;mid<=j-1;mid++)
48 {
49 dpma[i][j][len]=max(1ll*dpma[i][mid][num]*dpma[mid+1][j][len-num],1ll*dpma[i][j][len]);
50 dpmi[i][j][len]=min(1ll*dpmi[i][mid][num]*dpmi[mid+1][j][len-num],1ll*dpmi[i][j][len]);
51 }
52 }
53 }
54 }
55 }
56 int maxans=-1000,minans=2e9;
57 for(int i=1;i<=n;i++)
58 {
59 maxans=max(dpma[i][i+n-1][m],maxans);
60 minans=min(dpmi[i][i+n-1][m],minans);
61 }
62 printf("%d\n%d",minans,maxans);
63 return 0;
64 }
数字游戏(NOIP 2003 PJT2)的更多相关文章
- 1085 数字游戏 2003年NOIP全国联赛普及组
丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分 ...
- 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版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
随机推荐
- C#使用GDI+同时绘制图像和ROI在picturebox上
Bitmap bmp; /// <summary> /// 绘制图像 /// </summary> /// <param name="g">Gr ...
- 如何重启kafka
修改配置文件 ps -ef |grep kafka kill (kafka进程号) 启动kafka [root@lecode-dev-001 bin]# ./kafka-server-start.sh ...
- laravel的_token传值 ; header中传_token
laravel框架中只要是涉及到post传值都需要传 _token ,这是框架中为了防止crsf攻击所做的安全措施,那么我们用到ajax中的post 方式传值时,也需要在所传数据中添加一个_token ...
- MYSQL5.7 保姆级安装教程
现在要是说mysql是什么东西,就不礼貌了 虽然有的同学没有进行系统的深入学习,但应该也有个基本概念 [不了解也没关系,后续会进行mysql专栏讲解]简单来说,存储数据的 学习mysql,就要先安装它 ...
- NLP手札1. 金融信息负面及主体判定方案梳理&代码实现
这个系列会针对NLP比赛,经典问题的解决方案进行梳理并给出代码复现~也算是找个理由把代码从TF搬运到torch.Chapter1是CCF BDC2019的赛题:金融信息负面及主体判定,属于实体关联的情 ...
- PyQt5程序打包出错Failed to execute script
出现这种报错一般有两种可能: 1. 该被引入的资源你没有放到 exe 的相对路径 这种错误一般是你直接引入图片或者图标, 而没有放到 打包后的exe的相对路径 2. 加参数 假设 main.py 为程 ...
- 关于 Windows6.1-KB2999226-x64.msu 此更新不适用你的计算机解决办法
前言 今天被这个破问题坑了很长时间,网上一大堆扯跳过那个检查,通过提取 cab 文件然后直接用命令安装,我可以明确的告诉你不是那样的解决的,因为我实际用命令装过也装不上(这里我吐槽一下,我猜你最初的问 ...
- day21 单列索引与组合索引 & 索引的优点和使用原则 & 视图与函数
索引 1.索引有几种 四种,单列索引,组合索引,全文索引,空间索引 2.索引的优点 所有的MySQL数据库列类型都可以被索引,也就是可以给任意字段加索引 提高数据查询速度 索引的缺点 1)创建索引和维 ...
- 1.1 大数据简介-hadoop-最全最完整的保姆级的java大数据学习资料
目录 1 hadoop-最全最完整的保姆级的java大数据学习资料 1.1 大数据简介 1.1.1 大数据的定义 1.1.2 大数据的特点 1.1.3 大数据的应用场景 1.1.4 大数据的发展趋势及 ...
- 【大数据面试】ClickHouse:介绍、特点、数据类型、引擎、操作、副本、分片
1.介绍 开源的列式存储数据库(DBMS),由C++编写,用于在线分析处理查询(OLAP) 可以通过SQL查询实时生成分析数据报告 解释: DBMS:数据库管理系统 常见的列式存储数据库:Hbase. ...