洛谷P1018乘积最大——区间DP
题目:https://www.luogu.org/problemnew/show/P1018
区间DP+高精,注意初始化和转移的细节。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 20005
using namespace std;
typedef long long ll;
ll n,k,a[],f[][][MAXN],tmp[MAXN],num[MAXN];
char dc[];
void nm(ll l,ll r)
{
// printf("l=%lld r=%lld\n",l,r);
num[]=r-l+;
for(ll i=l;i<=r;i++)//正存即可
num[i-l+]=a[i];
// for(int i=1;i<=num[0];i++)printf("%lld",num[i]);
// cout<<endl;
}
void init()
{
a[]=strlen(dc);
for(ll i=;i<=a[];i++)
{
a[i]=dc[a[]-i]-'';
// memset(num,0,sizeof num);
// nm(1,i);
memcpy(f[i][],f[i-][],sizeof f[i-][]);//注意初始化!
f[i][][]++;f[i][][i]=a[i];
}
}
void ch(ll a[],ll b[])
{
tmp[]=a[]+b[]-;
for(ll i=;i<=a[];i++)
for(ll j=;j<=b[];j++)
{
tmp[i+j-]+=a[i]*b[j];
tmp[i+j]+=tmp[i+j-]/;
tmp[i+j-]%=;
}
if(tmp[tmp[]+])tmp[]++;
}
bool com(ll a[],ll b[])
{
if(a[]>b[])return ;
if(a[]<b[])return ;
for(ll i=a[];i;i--)
{
if(a[i]>b[i])return ;
if(a[i]<b[i])return ;
}
return ;
}
void print(ll a[])
{
for(ll i=a[];i;i--)
printf("%lld",a[i]);
}
int main()
{
scanf("%lld%lld",&n,&k);
cin>>dc;
init();
// f[1][1][0]=1;f[1][1][1]=1;
for(ll i=;i<=n;i++)
for(ll l=;l<=min(i-,k);l++)
for(ll j=l;j<i;j++)//从l开始!!!
{
// f[i][l]=max(f[j][l-1]*num(j+1,i),f[i][l]);
memset(tmp,,sizeof tmp);
memset(num,,sizeof num);
nm(j+,i);
ch(f[j][l-],num);
if(com(tmp,f[i][l]))memcpy(f[i][l],tmp,sizeof tmp);
}
print(f[n][k]);
return ;
}
洛谷P1018乘积最大——区间DP的更多相关文章
- 洛谷P2470 [SCOI2007]压缩(区间dp)
题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...
- 洛谷P1220关路灯——区间DP
题目:https://www.luogu.org/problemnew/show/P1220 区间DP. 代码如下: #include<iostream> #include<cstd ...
- 洛谷 P1018 乘积最大
P1018 乘积最大 题目描述 今年是国际数学联盟确定的“ 20002000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 9090 周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学 ...
- 洛谷P1040 加分二叉树(区间dp)
P1040 加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di, ...
- 洛谷 P1080 石子合并 ( 区间DP )
题意 : 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆 ...
- 洛谷$P1864\ [NOI2009]$二叉查找树 区间$dp$
正解:区间$dp$ 解题报告: 传送门$QwQ$ 首先根据二叉查找树的定义可知,数据确定了,这棵树的中序遍历就已经改变了,唯一能改变的就是通过改变权值从而改变结点的深度. 发现这里权值的值没有意义,所 ...
- 洛谷P1063能量项链(区间dp)
题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...
- 洛谷 P1043 数字游戏 区间DP
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- 洛谷 P1220 关路灯 区间DP
题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...
随机推荐
- Android 属性动画框架 ObjectAnimator、ValueAnimator ,这一篇就够了
前言 我们都知道 Android 自带了 Roate Scale Translate Alpha 多种框架动画,我们可以通过她们实现丰富的动画效果,但是这些宽家动画却有一个致命的弱点,它们只是改变了 ...
- jQuery Validate(三)
这里,我们再说说radio.checkbox.select的验证方式. 1.用新版的写法进行验证. <!DOCTYPE html> <html> <head> &l ...
- python爬虫,从hao123爬取网址信息
最近研究python的爬虫,小小程序,拿下来分享,本人使用python3.7,纯粹兴趣爱好,希望能帮助大家激发兴趣.从hao123,爬取各种网址信息,代码如下. import urllib.reque ...
- kotlin 语言入门指南(一)--基础语法
基于官网的Getting Start的基础语法教程部分,一共三节,这篇是第一节,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.u ...
- 基于RedHat发行的Apache Tomcat本地提权漏洞
描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于R ...
- 推荐TED演讲:20岁光阴不再来(Why 30 is not the new 20)
缘起 早上起来在电脑上看到"自强不息"群(群号)中骆宏给大家分享的视频."20岁光阴不再来",利用短暂的时间浏览了一下.就像把这个TED视频分享给很多其它的朋友 ...
- Grails 简要
一.什么是Grails? Grails is an Open Source, full stack, web application framework for the JVM. It takes a ...
- EasyPlayer windows RTSP播放器OCX插件使用说明
鉴于大家对于EasyPlayer插件的使用还不太熟悉,特此写一篇插件的使用文档,供大家参考:EasyPlayer插件有两种,一种是基于IE的ActiveX控件,一种是基于FireFox(也支持多浏览器 ...
- 九度OJ 1064:反序数 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3758 解决:2773 题目描述: 设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321) 求N的值 输入: 程序无任 ...
- framemarker的使用
1 什么是framemarker framemarker是网页模版和数据模型的结合体.装载网页的时候,framemarker自动从数据模型中提取数据并生成html页面. 2 framemarker怎么 ...