题目链接:乘积最大

这道题显然是道区间dp。

难度不是很大。

思路也很清晰。

我们设计一个三维状态。

ans[l][r][k]

这里表示在闭区间[l,r]上操作k次的最大值。

操作就是加乘号。

转移也很好转移,写一个双循环,外层循环断点,内层循环两段的操作次数。

下面放代码:

  1. #include<bits/stdc++.h>
  2. #ifdef WIN32
  3. #define LL "%I64d"
  4. #else
  5. #define LL "%lld"
  6. #endif
  7. using namespace std;
  8. long long ans[45][45][8];
  9. long long dp(char* num,int l,int r,int k){
  10. if(ans[l][r][k]>=0){ //1
  11. return ans[l][r][k];
  12. }
  13. if(k==0){ //2
  14. long long x=0;
  15. for(int i=l;i<=r;i++){
  16. x=x*10+num[i]-'0';
  17. }
  18. ans[l][r][k]=x;
  19. return x;
  20. }
  21. for(int i=l;i<r;i++){ //3
  22. for(int j=0;j<=k-1&&j<=(i-l)&&(k-1-j)<=(r-i-1);j++){ //4
  23. ans[l][r][k]=max(ans[l][r][k],dp(num,l,i,j)*dp(num,i+1,r,k-1-j)); //5
  24. }
  25. }
  26. return ans[l][r][k];
  27. }
  28. int main(){
  29. int n,k;
  30. scanf("%d%d",&n,&k);
  31. char num[n];
  32. memset(ans,-1,sizeof(ans));
  33. char c;
  34. scanf("%c",&c);
  35. scanf("%s",num);
  36. printf(LL,dp(num,0,n-1,k));
  37. return 0;
  38. }

讲五处:

1处:如果该值已经计算过,那么直接返回,记忆化搜索。

2处:如果操作数为0,说明该区间所有的数字都视为一个数,那么直接计算该数,并返回。

3处:循环断点。

4处:循环操作次数,有两个限制条件,第一个是不得超过当前操作次数;第二是左右两边分配的操作次数不得超过他们的区间长度减1,因为如果只有3个数,那最多只能加两个乘号,不能更多。

5处:两边计算结果成起来取最大值。

乘积最大(NOIP2000&NOIP水题测试(2017082301))的更多相关文章

  1. 进制转换(NOIP2000&NOIP水题测试(2017082301))

    题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...

  2. 失踪的7(P1590&NOIP水题测试(2017082301))

    题目链接:失踪的7 水题,不解释. #include<bits/stdc++.h> using namespace std; int main(){ int t; scanf(" ...

  3. 子数整数(P1151&NOIP水题测试(2017082301))

    题目链接:子数整数 水题,不解释,自己看代码: #include<bits/stdc++.h> using namespace std; int main(){ int k; scanf( ...

  4. NOIP水题测试(2017082301)

    你们从题目也能看出来今天的题是很水的. 前几期答案还没出,效率有点低,谅解,谅解. 今天的答案应该会出的很快. 下面给题目: 时间限制:3小时 题目一:旅行家的预算 题目二:进制转换 题目三:乘积最大 ...

  5. 求先序排列(NOIP2001&NOIP水题测试(2017082301))

    题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...

  6. NOIP水题测试(2017082401)

    哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...

  7. NOIP水题测试(2017082501)

    日常水题测试又来了! 以后答案都以单题形式公布. 下面看今天的水题: 时间限制:5小时 题目一:无法形容的水 题目二:比上一题还水 题目三:一元三次方程求解 题目四:单词接龙 题目五:统计单词个数 题 ...

  8. 旅行家的预算(NOIP1999&水题测试2017082301)

    题目链接:旅行家的预算 这题还可以,不算太水. 这题贪心即可. 我们采取如下动作: 如果在装满油的情况下能到达的范围内,没有加油站,则无解. 如果在装满油的情况下能到达的范围内,油价最低的加油站的油价 ...

  9. 历年NOIP水题泛做

    快noip了就乱做一下历年的noip题目咯.. noip2014 飞扬的小鸟 其实这道题并不是很难,但是就有点难搞 听说男神错了一个小时.. 就是$f_{i,j}$表示在第$i$个位置高度为$j$的时 ...

随机推荐

  1. CSS 变量教程

    一.变量的声明 声明变量的时候,变量名前面要加两根连词线(--). body { --foo: #7F583F; --bar: #F7EFD2; } 上面代码中,body选择器里面声明了两个变量:-- ...

  2. zabbix主动监测客户端设置

    主动/被动模式 主动模式和被动模式的区别一开始我也非常模糊,其实这是zabbix的两种工作方式,是相对于zabbix的agent端来说的,定义为: 主动模式:zabbix的agent端,也就是客户端, ...

  3. Linux查看修改时间、时区

    同步网络时间 yum install ntpntpdate time.nist.gov timedatectl set-timezone Asia/Shanghai如果上面time.nist.gov服 ...

  4. redismyadmin安装(支持redis4 集群模式)

    yum install php-pecl-redis https://github.com/daivem/RedisMyAdmin下载最新的安装包,解压yum install nginx php ph ...

  5. String int 相互转换

    String->int: int i = Integer.parseInt(s) int->String: String s = Integer.toString(i)

  6. java序列化的认识(从多本书和多个博客中的总结)

    Serializable接口是java.io下的一个标记接口,一个类要被序列化必须实现这个接口.

  7. Codeforces Round #520 (Div. 2)

    Codeforces Round #520 (Div. 2) https://codeforces.com/contest/1062 A #include<bits/stdc++.h> u ...

  8. Java自学之路(小白向)

    首先学习一门语言无非就受教与自学两种方式,本博文针对自学(穷逼没钱报班,大学又不是计算机专业,只能自学啊) 开个玩笑,其实有很多人是适合自学的,下面介绍. 一.要充满自信我自己就可以学好(够面试用的入 ...

  9. RocketMq顺序消费

    部分内容出处   https://www.jianshu.com/p/453c6e7ff81c rocketmq内部有4个默认的队里,在发送消息时,同一组的消息需要按照顺序,发送到相应的mq中,同一组 ...

  10. Xcode 去掉控制台无用打印信息

    1. 2.在Environment Variables增加一键值对 OS_ACTIVITY_MODE = disable 转自:https://blog.csdn.net/HelloWorld_198 ...