洛谷 P1043 数字游戏
题目传送门
解题思路:
跟石子合并差不多,区间DP(环形),用f[i][j][s]表示从i到j分成s段所能获得的最大答案,枚举断点k,则f[i][j][s] = min(f[i][j][s],f[i][k][s-1] * 代价),最小值反之.
ps:区间和用前缀和维护.
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std; int n,m,sum[],f[][][],f2[][][],a[]; int main() {
scanf("%d%d",&n,&m);
for(int i = ;i <= n; i++) {
scanf("%d",&a[i]);
sum[i] = sum[i-] + a[i];
}
memset(f,0x3f3f,sizeof(f));
for(int i = n + ;i <= * n; i++)
sum[i] = sum[i-n] + sum[n];
for(int i = ;i <= * n; i++)
for(int j = i;j <= * n; j++)
f[i][j][] = f2[i][j][] = ((sum[j] - sum[i-]) % + ) % ;
for(int len = ;len < n; len++)
for(int i = ,j = i + len;j <= * n; i++,j++)
for(int s = ;s <= m; s++)
for(int k = i + s - ;k < j; k++) {
f[i][j][s] = min(f[i][j][s],f[i][k][s-] * (((sum[j] - sum[k]) % + ) % ));
f2[i][j][s] = max(f2[i][j][s],f2[i][k][s-] * (((sum[j] - sum[k]) % + ) % ));
}
int maxans = ;
int minans = 0x3f3f3f3f;
for(int i = ;i <= * n; i++) {
maxans = max(maxans,f2[i][i+n-][m]);
minans = min(minans,f[i][i+n-][m]);
}
printf("%d\n%d",minans,maxans);
return ;
}
洛谷 P1043 数字游戏的更多相关文章
- 洛谷——P1043 数字游戏
https://www.luogu.org/problem/show?pid=1043 题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要 ...
- 洛谷P1043 数字游戏
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 洛谷 P1043 数字游戏 区间DP
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 洛谷 P1043 数字游戏(区间dp)
题目链接:https://www.luogu.com.cn/problem/P1043 这道题与石子合并很类似,都是把一个环强制改成一个链,然后在链上做区间dp 要初始化出1~2n的前缀和,方便在O( ...
- 洛谷P1043数字游戏
题目 区间DP,将\(maxn[i][j][k]\)表示为i到j区间内分为k个区间所得到的最大值,\(minn\)表示最小值. 然后可以得到状态转移方程: \[maxn[i][j][k]= max(m ...
- 洛谷 P5660 数字游戏 & [NOIP2019普及组]
传送门 洛谷改域名了QAQ 解题思路 没什么好说的,一道红题,本不想发这篇博客 ,但还是尊重一下CCF吧QAQ,怎么说也是第一年CSP呢! 用getchar一个个读入.判断.累加,最后输出即可. 不过 ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- 洛谷P1553 数字翻转(升级版)
题目链接 https://www.luogu.org/problemnew/show/P1553 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的 ...
随机推荐
- java中栈内存与堆内存(JVM内存模型)
java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...
- Java枚举类型enum使用详解
java的Enum枚举类型终于在j2se1.5出现了.之前觉得它只不过是鸡肋而已,可有可无.毕竟这么多年来,没有它,大家不都过得很好吗?今日看<Thinking in Java>4th ...
- Navicat导入json文件到数据库
最近做小程序商城系统,物流管理这块需要存储国际和中国的物流地址. 所以,天哪,地址那么的多!!!! www.baidu.com,搜索大佬是如何做的.有的是通过访问阿里云快递物流api接口获取数据存入数 ...
- 如何给谷歌浏览器安装vue-devtools插件
感谢原作者:https://www.cnblogs.com/alice-fee/p/8038367.html 安装方法1: 需正常打开chrome商店,搜索vuejs devtools 安装.chro ...
- axios和fetch
前面的vuex提到了异步请求,在vue里异步请求怎么请求呢,很显然jq.ajax是不用了,不是不能用,而是没必要,jq是操作dom的工具,强行用浪费功能,还会加大打包后的体积,而且是没有promise ...
- synchronized wait notify 生产者消费者
1.生产者消费者模型 public class ProducterConsumerTest{ public static void main(String[] args){ System.out.pr ...
- sed的妙用
sed 使用-n选项和p可以实现在指定范围内的搜索貌似实现了比grep更精确的搜索
- JAVA实现数组的反转--基础
直接上代码 这个算法比较简单,唯一需要注意的就是第8行和第9行.一定要多减去1 因为for循环从0开始,而数组长度是从0到length-1的. class ArrReverse { //实现数组元素的 ...
- 吴裕雄--天生自然java开发常用类库学习笔记:System类
public class SystemDemo01{ public static void main(String args[]){ long startTime = System.currentTi ...
- B. RGB plants
B. RGB plants time limit per test 2.0 s memory limit per test 64 MB input standard input output stan ...