一 原始数据处理
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)的更多相关文章

  1. 1085 数字游戏 2003年NOIP全国联赛普及组

    丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分 ...

  2. NOIP 数字游戏

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

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

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

  4. Codevs 1085 数字游戏

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

  5. 1861 奶牛的数字游戏 2006年USACO

    codevs——1861 奶牛的数字游戏 2006年USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Descript ...

  6. C语言猜数字游戏

    猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...

  7. 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II

    好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...

  8. java 猜数字游戏

    作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...

  9. 【原创Android游戏】--猜数字游戏Version 0.1

    想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...

  10. 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用

    --------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...

随机推荐

  1. 畅联云平台(www.24hlink.cn)支持的用传列表

    无锡蓝天 沈阳君丰 无锡富贝 海康威视 海湾 苏州思迪 法安通 北大青鸟 金盾 依爱 威隆 1)几乎集齐了市场上常见的用户信息传输装置的类型,如果没接入的,我们也能接入哦. 2)欢迎咨询我们关于用传的 ...

  2. Redis Cluster 数据分片

    介绍 Redis Cluster Redis 集群是 Redis 提供的分布式数据库方案, 集群通过分片(sharding) 来进行数据共享, 并提供复制和故障转移功能. 节点 一个 Redis 集群 ...

  3. Go语言核心36讲41

    你好,我是郝林,今天我们继续分享bytes包与字节串操作的相关内容. 在上一篇文章中,我们分享了bytes.Buffer中已读计数的大致功用,并围绕着这个问题做了解析,下面我们来进行相关的知识扩展. ...

  4. Go语言核心36讲40

    我相信,经过上一次的学习,你已经对strings.Builder和strings.Reader这两个类型足够熟悉了. 我上次还建议你去自行查阅strings代码包中的其他程序实体.如果你认真去看了,那 ...

  5. Go语言核心36讲38

    到目前为止,我们已经一起陆陆续续地学完了Go语言中那些最重要也最有特色的概念.语法和编程方式.我对于它们非常喜爱,简直可以用如数家珍来形容了. 在开始今天的内容之前,我先来做一个简单的总结. Go语言 ...

  6. VS使用web deploy发布到远程服务器

    如果是先安装 web deploy后安装iis的功能,需要在iis功能安装好后,修复下web deploy(直接运行web deploy的安装程序有修复)(本人也死在这里) 1.iis开启管理服务,和 ...

  7. 在服务器上搭建Jenkins自动化部署工具

    在公司发现很多时候都需要手动部署,然后有天听到自动部署这个词想着有没有什么工具能够自动部署项目,最好能自动化部署前后端生成 docker images 运行方便管理.最后经过我各种筛查,发现用 jen ...

  8. 微服务系列之服务注册发现 Consul

    1.为什么需要服务注册与发现   微服务架构中,服务于服务之间内部通信必不可少,比如A服务调用B服务,起初我们的做法是,A服务从配置文件中拿到B服务的IP.端口地址,进行访问,本身是没什么问题的,但是 ...

  9. MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping

    前置准备 实现机器为VMWare的虚拟机,操作系统为 Debian-11(无桌面版本),内核版本为 5.10.0,指令集为 AMD64(i7 9700K),编译器为 GCC-10 QEMU 虚拟化支持 ...

  10. python中函数教程

    函数的基本概念 1.什么是函数? 函数相当于一种工具,就是把一串代码装到一起,我们下次需要用的这个功能的时候可以直接使用 函数相当于是工具(具有一定功能) 不用函数 修理工需要修理器件要用锤子 原地打 ...