906 AlvinZH的奇幻猜想----整数乘积

思路

难题。动态规划。

将数字串按字符串输入,处理起来更方便些。

dp[i][j]:表示str[0~i]中插入j个乘号时的乘积最大值。状态转移方程为:dp[i][j] = max(dp[i][j], dp[i-k][j-1]*convert(i-k+1,i)),k∈[1,i-j+1],convert为数字转换函数。具体见参考代码一。

思想相同,另一份代码可能也比较好理解,见参考代码二。请思考各重循环的含义。

注意:本题要在long long范围内计算。

参考代码一

//
// Created by AlvinZH on 2017/10/30.
// Copyright (c) AlvinZH. All rights reserved.
// #include <cstdio>
#include <cstring>
typedef long long LL; long long dp[22][12];
char num[22]; LL convert(int l, int r)
{
LL res = 0;
for (int i = l; i <= r; ++i)
res = res*10 + (num[i]-'0');
return res;
} int main()
{
//freopen("in1.txt", "r", stdin);
//freopen("outme.txt", "w", stdout);
int n;
while(~scanf("%d", &n))
{
memset(dp, 0, sizeof(dp));
scanf("%s", num); int len = strlen(num);
dp[0][0] = num[0] - '0';
for (int i = 1; i < len; ++i)//初始化
dp[i][0] = dp[i-1][0] * 10 + (num[i] - '0'); for (int i = 0; i < len; ++i)
{
for (int j = 1; j <= (n<i? n:i); ++j)//最多有(n<i? n:i)个乘号
{
for (int k = 1; k <= (i-j+1); ++k)//在i-k位置后添加一个乘号
{
LL tem = dp[i-k][j-1]*convert(i-k+1,i);
if(dp[i][j] < tem) dp[i][j] = tem;
}
}
}
printf("%lld\n", dp[len-1][n]);
}
}

参考代码二

/*
Author: 林未(12742)
Result: AC Submission_id: 417895
Created at: Sat Nov 18 2017 16:26:54 GMT+0800 (CST)
Problem: 906 Time: 0 Memory: 2740
*/ #include <bits/stdc++.h>
using namespace std;
long long dp[20][12]; int main()
{
int n;
string numstr;
while(cin>>n>>numstr){
memset(dp, 0, sizeof(dp));
int len = numstr.length();
dp[1][0]=numstr[0]-'0';
for(int i=1; i<len; i++){
dp[i+1][0]=(numstr[i]-'0')+dp[i][0]*10;
}
int d, u;
for(int i=1; i<=n; i++){
for(int j=i+1; j<=len; j++){
for(int k=i; k<j; k++){
for(d=0, u=k+1; u<=j; u++){
d=d*10+(numstr[u-1]-'0');
}
if(dp[j][i]<dp[k][i-1]*d){
dp[j][i]=dp[k][i-1]*d;
}
}
}
}
cout<<dp[len][n]<<endl;
}
return 0;
}

906 AlvinZH的奇幻猜想----整数乘积(背包DP大作战O)的更多相关文章

  1. 991 AlvinZH的奇幻猜想----整数乘积plus(背包DP大作战P)

    914 AlvinZH的奇幻猜想----整数乘积puls 思路 难题.动态规划. 将数字串按字符串输入,处理起来更方便些. dp[i][j]:表示str[0~i]中插入j个乘号时的乘积最大值.状态转移 ...

  2. AlvinZH掉坑系列讲解(背包DP大作战H~M)

    本文由AlvinZH所写,欢迎学习引用,如有错误或更优化方法,欢迎讨论,联系方式QQ:1329284394. 前言 动态规划(Dynamic Programming),是一个神奇的东西.DP只能意会, ...

  3. 963 AlvinZH打怪刷经验(背包DP大作战R)

    963 AlvinZH打怪刷经验 思路 这不是一道普通的01背包题.大家仔细观察数据的范围,可以发现如果按常理来的话,背包容量特别大,你也会TLE. 方法一:考虑01背包的一个常数优化----作用甚微 ...

  4. 976 AlvinZH想回家(背包DP大作战T)

    976 AlvinZH想回家 思路 如果在第i小时有一些飞机延误,那么一架飞机的c值越大,这一小时产生的损失也越大.而使这一小时产生的损失尽可能的小并不会导致接下来时间产生的损失增大.因此应当每一小时 ...

  5. 977 AlvinZH过生日(背包DP大作战S)

    977 AlvinZH过生日 思路 难题.逆推DP. 要明确dp的状态只与是否有选择权有关,而与选择权在谁手里无关.因为不论选择权在谁手里,那个人都会尽可能的获得最大的蛋糕重量. dp[i]表示分配到 ...

  6. 851 AlvinZH的鬼畜密码(背包DP大作战N)

    851 AlvinZH的鬼畜密码 思路 难题.动态规划. 先判断字符串是否合理(可翻译),然后分段处理,每一小段用动态规划求出解法数. dp[i]:字符串str[0~i]的解法数.通过判断str[i] ...

  7. 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方

    905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...

  8. DP大作战——多重背包

    题目描述 在之前的上机中,零崎已经出过了01背包和完全背包,也介绍了使用-1初始化容量限定背包必须装满这种小技巧,接下来的背包问题相对有些难度,可以说是01背包和完全背包的进阶问题. 多重背包:物品可 ...

  9. DP大作战—组合背包

    题目描述 组合背包:有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包). DD大牛的伪代码 for i = 1 to N if 第i件物品属 ...

随机推荐

  1. MySQL 时间函数加减计算

    一.MySQL 获得当前日期时间 函数 1.1 获得当前日期 + 时间(date + time) 函数:now() mysql> select now();+———————+| now() |+ ...

  2. mount命令使用

    mount命令是一个很常用的命令,这里介绍两个服务器上之间的挂载 1 配置NFS服务 FTP服务器提供NFS服务,开放具体路径(/home/hadoop)完全控制权限给其他板子.可以将两个板子之间建立 ...

  3. HUST软测1504班第4周小组作业成绩:WordCount优化

    说明 本次公布的成绩为第四周作业的结果: 第4周小组作业:WordCount优化 博客推荐:本次作业有一位同学完成有创意,推荐优秀博客.(优秀博客不会对成绩带来正面或者负面影响)PS:做任何创新的任务 ...

  4. 03 Complementing a Strand of DNA

    Problem In DNA strings, symbols 'A' and 'T' are complements of each other, as are 'C' and 'G'. The r ...

  5. srand()、rand()、time()函数的用法

    srand()就是给rand()提供种子seed. 如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的. 以一个固定的数值作为种子是一个缺点.通常的做法是 :以这样一句srand ...

  6. es-文档版本号,操作类型,分片选择

    一.版本号: 在es中每个文档都有一个版本号,默认情况下,版本号都是随着每次对该文档的修改或者删除自增的,当然你也可以自己指定.有了这个文档号,我们可以像mysql 乐观锁一样,用来进行控制字我们文档 ...

  7. springboot启动正常,访问restController报404

    原因:spring boot只会扫描启动类当前包和以下的包 比如以下: 主类:Application放在包com.springboot.main controller类放在包com.springboo ...

  8. 使用Word2016发布CSDN博客

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  9. Java知多少虚拟机(JVM)以及跨平台原理

    相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...

  10. CentOS 7.2安装gitlab-ce

    国内网络原因,gitlab-ce安装包可以在清华大学开源网站镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ [root@gitlab ~]# ...