NOIP2003pj数字游戏[环形DP]
题目描述
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。
例如,对于下面这圈数字(n=4,m=2):

要求最小值时,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值时,为((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特别值得注意的是,无论是负数还是正数,对10取模的结果均为非负值。
丁丁请你编写程序帮他赢得这个游戏。
输入输出格式
输入格式:
输入文件第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。
输出格式:
输出文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。
输入输出样例
4 2
4
3
-1
2
7
81
------------------------------------------------------------
复制到后面
f[i][j][k]表示i到j分成k段,转移和乘积最大好像
该取模时就取模
WARN:小心m==1
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=,M=;
int n,m,a[N<<],s[N<<];
int f[N<<][N<<][M],g[N<<][N<<][M],mx=-1e9,mn=1e9;
inline int sum(int i,int j){
return (s[j]-s[i-]+)%;
}
void dp(){
for(int i=;i<=n*;i++) f[i][i][]=g[i][i][]=(a[i]+)%;
for(int i=;i<=n*;i++)
for(int j=i+;j<=n*&&j<=i+n-;j++){
f[i][j][]=g[i][j][]=sum(i,j); if(j-i+==n&&m==) mx=max(mx,f[i][j][]),mn=min(mn,g[i][j][]);
int num=min(m,j-i+);
for(int k=;k<=num;k++){
f[i][j][k]=-1e9;g[i][j][k]=1e9;
for(int t=;t<=j-i;t++){
f[i][j][k]=max(f[i][j][k],f[i][j-t][k-]*sum(j-t+,j));
g[i][j][k]=min(g[i][j][k],g[i][j-t][k-]*sum(j-t+,j));
}
if(j-i+==n&&k==m) mx=max(mx,f[i][j][k]),mn=min(mn,g[i][j][k]);
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),a[i+n]=a[i]=(a[i]%+)%;
for(int i=;i<=n*;i++) s[i]=(s[i-]+a[i]+)%;
dp();
printf("%d\n%d",mn,mx);
}
NOIP2003pj数字游戏[环形DP]的更多相关文章
- 洛谷 P1043 数字游戏 区间DP
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- NOIP2009pj道路游戏[环形DP 转移优化 二维信息]
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
- [luoguP1043] 数字游戏(DP)
传送门 搞个前缀和随便DP一下 代码 #include <cstdio> #include <cstring> #include <iostream> #defin ...
- codevs1085数字游戏(环形DP+划分DP )
1085 数字游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单, ...
- codevs 1085 数字游戏 dp或者暴搜
1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单 ...
- 【dp】数字游戏&寒假祭
区间DP 题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按 ...
- [区间+线性dp]数字游戏
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共\(n\)个),你要按顺 ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- Codevs 1085 数字游戏
1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 丁丁最近沉迷于一个数字游戏之中 ...
随机推荐
- [js开源组件开发]query组件,获取url参数和form表单json格式
query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...
- window7安装git详解
1.Git详细介绍 一.Git的诞生 Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢? 事实是 ...
- SyBase Powerdesigner生成数据库详细表
工具: Sybase PowerDesigner 15.1 Microsoft SQL Server 2005 第一步概要设计: 打开PowerDesigner软件,设计“概念数据模型”(Concep ...
- SharePoint 解决打开浏览器自动登录
SharePoint使用Windows身份验证,默认会弹出Windows验证登录框,如下图所示: 1.对于已经加域的客户端 IE安全设置,将站点加信任站点,然后修改信任站点安全设置, 滚动条拉到最后, ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q19-Q20)
Question 19 You are designing a custom SharePoint 2010 solution package. It will include a feature t ...
- Android App 开发技能图谱
操作系统 Windows/MacOSX/Linux 编程语言 Java HTML/JS (Hybrid/Web App) C/C++ (NDK) SQL (DB) Kotlin 开发工具 IDE An ...
- HDOJ1001-1005题解
1001--Sum Problem(http://acm.hdu.edu.cn/showproblem.php?pid=1001) #include <stdio.h> int sum(i ...
- Swift (if while)
Swift 分支 if if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 3.0 let num2 = 4.0 let bool : Bool = true ...
- 从零开始一个iOS项目(一)——基本准备以及cocopods的安装
项目开发分为:独立开发和迭代开发,我主要讲独立开发,若读者是迭代开发,希望公司的代码一定要规范,便能省去许多麻烦,也能从中获益,闲时也可接些外包,赚一些外快,也是美差,然而独立开发最能锻炼人的能力. ...
- vs2012中使用Icenium开发应用
Developing a Cross Platform Mobile App in Visual Studio using JavaScript & HTML5 http://www.dotn ...