洛谷 P1043 数字游戏(区间dp)
题目链接:https://www.luogu.com.cn/problem/P1043
这道题与石子合并很类似,都是把一个环强制改成一个链,然后在链上做区间dp
要初始化出1~2n的前缀和,方便在O(1)的时间内查询[l,r]区间的和。
f[l][r][h] ->
第一维:左端点;第二维:右端点;第三维:分成了几段。
动态转移方程:
很显然的一个初始化:f[l][r][1]=del(sum[r]-sum[l-1]);
转移:f[l][r][h]=min/max(f[l][r][h],f[l][k][h-1]*del(sum[r]-sum[k]));
注意k的枚举
注意初始化数的大小,尤其是memset,0x3f,0x7f,0xc0等。
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring> using namespace std; int n,m;
int a[],sum[];
int f1[][][],f2[][][];
int maxn,minn=0x7f; inline int del(int x){
return (x%+)%;
} int main(){
memset(f1,0x3f,sizeof(f1));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
a[i+n]=a[i];
sum[i]=sum[i-]+a[i];
}
for(int i=;i<=n;i++) sum[i+n]=sum[i]+sum[n];
for(int l=;l<=*n;l++){
for(int r=l;r<=*n;r++){
f1[l][r][]=f2[l][r][]=del(sum[r]-sum[l-]);
}
}
for(int i=;i<=n;i++){
for(int l=;l+i-<=*n;l++){
int r=l+i-;
for(int h=;h<=m;h++){
for(int k=l+h-;k<r;k++){
f1[l][r][h]=min(f1[l][r][h],f1[l][k][h-]*del(sum[r]-sum[k]));
f2[l][r][h]=max(f2[l][r][h],f2[l][k][h-]*del(sum[r]-sum[k]));
}
}
}
}
for(int i=;i<=n;i++){
maxn=max(maxn,f2[i][i+n-][m]);
minn=min(minn,f1[i][i+n-][m]);
}
printf("%d\n%d",minn,maxn);
return ;
}
AC代码
洛谷 P1043 数字游戏(区间dp)的更多相关文章
- 洛谷 P1043 数字游戏 区间DP
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 洛谷——P1043 数字游戏
https://www.luogu.org/problem/show?pid=1043 题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要 ...
- 洛谷P1043 数字游戏
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 洛谷P1043数字游戏
题目 区间DP,将\(maxn[i][j][k]\)表示为i到j区间内分为k个区间所得到的最大值,\(minn\)表示最小值. 然后可以得到状态转移方程: \[maxn[i][j][k]= max(m ...
- 洛谷 P1043 数字游戏
题目传送门 解题思路: 跟石子合并差不多,区间DP(环形),用f[i][j][s]表示从i到j分成s段所能获得的最大答案,枚举断点k,则f[i][j][s] = min(f[i][j][s],f[i] ...
- $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...
- 洛谷P1040 加分二叉树(区间dp)
P1040 加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di, ...
- 洛谷 P1220 关路灯 区间DP
题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...
- 洛谷P2470 [SCOI2007]压缩(区间dp)
题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...
随机推荐
- Paper: ModelarDB
Problem: how to store and querry massive amounts of high quality sensor data ingested in real-time f ...
- redis 的安装和使用
一.套用别人的话: redis 很牛叉,能将不同类型的数据存到内存,存到内存取出的时候就快了.所以,他很受欢迎.还有一个很牛叉的叫memcache ,但是他存的数据类型很有限,只能存入string 类 ...
- js -- 高阶函数的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 洛谷P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
#include<iostream> using namespace std ; ; int y[N][N]; int n; int a[N]; bool st[N]; int sum; ...
- Junit +cucumber 运行报错 initiallizationError
step1: 访问 https://search.maven.org/ 搜索下载相关jar包 step2: 访问 http://maven.outofmemory.cn/info.cukes/cuc ...
- Android开发实战——记账本(5)
开发日志——(5) 今天打算将图标的功能实现,将打开图表的选项放在右上方,所以重写MainActivity中的onOptionsItemSelected方法.增添Chart选项 public ...
- unittest的命令执行
命令窗口执行: 1.可以在命令窗口下执行单个module.class.method python -m unittest test_module1 test_module2 python -m uni ...
- 8.10-Day2T2 吃喝大法好
题目大意 略... 题解 开始两个人一定是一个向右走一个向下走,向右走的人最终会走到(n-1,m),向下走的人一定会走到(n,m-1). 那么不考虑重复的话总的路径数就是从(1,2)到(n-1,m)的 ...
- linx下跑多个tomcat
1.修改server.xml文件 <Server port="8005" shutdown="SHUTDOWN"> <Connector po ...
- 利用数据库管理工具(Navicat)导出数据到Excel表中
如果只是想把数据库表中数据简单导出来,可以利用数据库管理工具中的工具 1.先查询 2.在查询出结果中全选 3.导出向导 4.选择Excel 5.选择导出地址并命名