乘积最大(NOIP2000&NOIP水题测试(2017082301))
题目链接:乘积最大
这道题显然是道区间dp。
难度不是很大。
思路也很清晰。
我们设计一个三维状态。
ans[l][r][k]
这里表示在闭区间[l,r]上操作k次的最大值。
操作就是加乘号。
转移也很好转移,写一个双循环,外层循环断点,内层循环两段的操作次数。
下面放代码:
#include<bits/stdc++.h>
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
using namespace std;
long long ans[45][45][8];
long long dp(char* num,int l,int r,int k){
if(ans[l][r][k]>=0){ //1
return ans[l][r][k];
}
if(k==0){ //2
long long x=0;
for(int i=l;i<=r;i++){
x=x*10+num[i]-'0';
}
ans[l][r][k]=x;
return x;
}
for(int i=l;i<r;i++){ //3
for(int j=0;j<=k-1&&j<=(i-l)&&(k-1-j)<=(r-i-1);j++){ //4
ans[l][r][k]=max(ans[l][r][k],dp(num,l,i,j)*dp(num,i+1,r,k-1-j)); //5
}
}
return ans[l][r][k];
}
int main(){
int n,k;
scanf("%d%d",&n,&k);
char num[n];
memset(ans,-1,sizeof(ans));
char c;
scanf("%c",&c);
scanf("%s",num);
printf(LL,dp(num,0,n-1,k));
return 0;
}
讲五处:
1处:如果该值已经计算过,那么直接返回,记忆化搜索。
2处:如果操作数为0,说明该区间所有的数字都视为一个数,那么直接计算该数,并返回。
3处:循环断点。
4处:循环操作次数,有两个限制条件,第一个是不得超过当前操作次数;第二是左右两边分配的操作次数不得超过他们的区间长度减1,因为如果只有3个数,那最多只能加两个乘号,不能更多。
5处:两边计算结果成起来取最大值。
乘积最大(NOIP2000&NOIP水题测试(2017082301))的更多相关文章
- 进制转换(NOIP2000&NOIP水题测试(2017082301))
题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...
- 失踪的7(P1590&NOIP水题测试(2017082301))
题目链接:失踪的7 水题,不解释. #include<bits/stdc++.h> using namespace std; int main(){ int t; scanf(" ...
- 子数整数(P1151&NOIP水题测试(2017082301))
题目链接:子数整数 水题,不解释,自己看代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf( ...
- NOIP水题测试(2017082301)
你们从题目也能看出来今天的题是很水的. 前几期答案还没出,效率有点低,谅解,谅解. 今天的答案应该会出的很快. 下面给题目: 时间限制:3小时 题目一:旅行家的预算 题目二:进制转换 题目三:乘积最大 ...
- 求先序排列(NOIP2001&NOIP水题测试(2017082301))
题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...
- NOIP水题测试(2017082401)
哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...
- NOIP水题测试(2017082501)
日常水题测试又来了! 以后答案都以单题形式公布. 下面看今天的水题: 时间限制:5小时 题目一:无法形容的水 题目二:比上一题还水 题目三:一元三次方程求解 题目四:单词接龙 题目五:统计单词个数 题 ...
- 旅行家的预算(NOIP1999&水题测试2017082301)
题目链接:旅行家的预算 这题还可以,不算太水. 这题贪心即可. 我们采取如下动作: 如果在装满油的情况下能到达的范围内,没有加油站,则无解. 如果在装满油的情况下能到达的范围内,油价最低的加油站的油价 ...
- 历年NOIP水题泛做
快noip了就乱做一下历年的noip题目咯.. noip2014 飞扬的小鸟 其实这道题并不是很难,但是就有点难搞 听说男神错了一个小时.. 就是$f_{i,j}$表示在第$i$个位置高度为$j$的时 ...
随机推荐
- WPF HyperLink链接下划线隐藏
两种方法: 1.在Grid标签内添加资源样式. <Grid.Resources> <Style TargetType="Hyperlink"> <Se ...
- Xcode调试与其他
在项目中设置main接收的参数,模拟终端输入 Product->Scheme->Edit Scheme->Run->Arguments 例: 相当于在终端执行命令:./ac-t ...
- freetype教程网址
http://freetype.sourceforge.net/freetype2/docs/reference/ft2-system_interface.html#FT_Stream ht ...
- Delphi:基于jcl的Bugsplat Crash收集单元
//BugSplat Crash模拟.net数据封装 unit uBugSplat; interface uses Windows, SysUtils, Classes, StrUtils, Shel ...
- Springboot学习03-SpringMVC自动配置
Springboot学习03-SpringMVC自动配置 前言 在SpringBoot官网对于SpringMVCde 自动配置介绍 1-原文介绍如下: Spring MVC Auto-configur ...
- Web API中常用Filter的执行顺序举例讲解
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- go语言使用go-sciter创建桌面应用(五) 加载元素资源
有些时候我们需要动态的给某个UI元素加载内容或数据. demo6.go代码如下: package main; import ( "github.com/sciter-sdk/go-scite ...
- oracle 11g用exp无法导出空表的解决方案
racle 11g中有个新特性,当表无数据时,不分配segment,以节省空间,当我们用exp导出空表时,无法导出. 解决方法是两个方面, 一是处理现有的空表,让其能导出: 二是设置参数,让后续的新的 ...
- Ubuntu 16.04安装JDK并配置环境变量-【小白版】
系统版本:Ubuntu 16.04 JDK版本:jdk1.8.0_121 1.官网下载JDK文件jdk-8u121-linux-x64.tar.gz 我这里下的是最新版,其他版本也可以 2.创建一个目 ...
- c语言练习题:求1-1/2+1/3-1/4+... -1/100的值
/******************************************* 求1-1/2+1/3-1/4+... -1/100的值 *************************** ...