整数划分(四)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷。。亲爱的你能帮帮他吗?

问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积

 
输入
第一行是一个整数T,表示有T组测试数据
接下来T行,每行有两个正整数 n,m ( 1<= n < 10^19, 0 < m <= n的位数);
输出
输出每组测试样例结果为一个整数占一行
样例输入
2
111 2
1111 2
样例输出
11
121 使用动态规划的思想,思考了整整一下午,没想到最后做出了5层循环的动态规划。好在题目AC了,后又看网上的答案,使用的是DP区间动态规划算法,今天就不去研究了,有些累。下面是我的算法
#include <string>
#include <sstream>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std; #define NUM 20 long long atoll(const char* p)
{
stringstream strValue;
strValue << p;
long long value;
strValue >> value;
return value;
} int main()
{
int count;
scanf("%d", &count);
while(count--)
{
int i,j,k,l,m,n;
long long mm[NUM][NUM][NUM];
char num[NUM];
char temp[NUM];
scanf("%s", num);
n = strlen(num);
scanf("%d", &m);
for(k = ; k < m; k++)
{
for(i = ; i < n; i++)
{
for(j = i + k; j < n; j++)
{
if(k == )
{
strncpy(temp, num+i, j-i+);
temp[j-i+] = '\0';
mm[i][j][k] = atoll(temp);
}
else
{
long long res = -;
for(l = ; l < j-i; l++)
{
int o, k1=, k2=;
for(o = ; o < l+ && o < k; o++)
{
k1 = o;
k2 = k - - k1;
long long tRes = mm[i][i+l][k1] * mm[i+l+][j][k2];
res = res > tRes ? res:tRes;
}
}
mm[i][j][k] = res;
}
}
}
}
cout << mm[][n-][m-] << endl;
}
return ;
}

dp区间算法

#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
#include <algorithm>
typedef long long ll;
typedef long long Array[];
Array ob;
ll n,m,res,reco,rec,cur,maxs,temp;
using namespace std;
ll pow_dfs(ll i){
ll ress=;
for(ll j=;j<=i;j++){
ress*=;
}
return ress;
}
ll maxmin(ll a,ll b){
return a>b?a:b;
}
void DFS(ll pos,ll rec,ll now){
if(rec==m-){
ob[rec]=now;
cur=;
for(int i=;i<m;i++){
cur*=ob[i];
}
maxs=maxmin(cur,maxs);
return ;
}
if(pos>=reco)
return ;
DFS(pos+,rec,now);
ob[rec]=now/pow_dfs(reco-pos);
now=now%pow_dfs(reco-pos);
DFS(pos+,rec+,now);
}
int main(){
ll T;
//freopen("D://imput.txt","r",stdin);
scanf("%lld",&T);
while(T--){
reco=;maxs=;
scanf("%lld%lld",&n,&m);
temp=n;
while(temp/){
temp=temp/;
reco++;
}
DFS(,,n);
printf("%lld",maxs);
if(T!=)
printf("\n");
}
return ;
}

ACM 整数划分(四)的更多相关文章

  1. nyoj746 整数划分(四)

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到 ...

  2. NYOJ746——整数划分(四)

    描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整 ...

  3. 整数划分 (区间DP)

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...

  4. 整数划分 Integer Partition(二)

    本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合 ...

  5. 大概是:整数划分||DP||母函数||递推

    整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...

  6. HDU4632 Poj2955 括号匹配 整数划分 P1880 [NOI1995]石子合并 区间DP总结

    题意:给定一个字符串 输出回文子序列的个数    一个字符也算一个回文 很明显的区间dp  就是要往区间小的压缩! #include<bits/stdc++.h> using namesp ...

  7. HOJ 1402 整数划分

    HOJ1402 整数划分 http://acm.hit.edu.cn/hoj/problem/view?id=1402 [题目描述] 整数划分是一个经典的问题.希望这道题会对你的组合数学的解题能力有所 ...

  8. hdu 1028 & hdu 1398 —— 整数划分(生成函数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1028 整数划分,每个数可以用无限次: 所以构造 f(x) = (1+x+x2+x3+...)(1+x2+x ...

  9. HDU 5230 ZCC loves hacking 大数字的整数划分

    http://acm.hdu.edu.cn/showproblem.php?pid=5230 把题目简化后,就是求 1---n - 1这些数字中,将其进行整数划分,其中整数划分中不能有重复的数字,如果 ...

随机推荐

  1. Struts2标签--S:iterator----jsp页面遍历双层list

    双层遍历,第一层list为classes,里面放的是班级class对象,第二层为班级class里的小组groups.     <s:iterator value="classes&qu ...

  2. css,html性能优化

    css性能优化 CSS是负责布局和渲染的重要角色,漂亮的页面当然能够吸引用户.本文是自己在开发过程中总结的关于CSS与性能的关系,可能有不对之处,希望能够指出. ? 1.所有的样式尽量放在css文件中 ...

  3. 使用python制作ArcGIS插件(3)ArcPy的使用说明

    使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...

  4. 阿里云SSD等磁盘挂载方法(详细步骤完整版)

    1,根据提示购买一块,在阿里云管理磁盘的列表"更多"点击,选中"挂载": 2,进入远程实例(远程系统),管理-->存储-->磁盘管理,在右侧看到新挂 ...

  5. Swift2.0 UITextView 和 UITextFile 的使用

    在Swift2.0中,UITextFile 和 UITextView 的使用总体上和在OC中是一样的,今天只是给大家一段代码,然后说UITextView里面的光标位置的问题.先看他们使用的简单的代码 ...

  6. windows下搭建Nexus3私服和基于IDEA15的Maven学习笔记

    搭建Nexus私服. 首先去官网下载window下用的zip文件.https://www.sonatype.com/download-oss-sonatype. 解压之后包含下面两个文件 进入nexu ...

  7. bootstrap - btn

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. linux下apache 的安装

    1.进入work目录下:cd /usr/local/work(如没有则自己新建,命令:mkdir /usr/local/work) 2.在woke目录下从网站下载apache并解压:wget http ...

  9. SCP实现无需密码传输文件

    SCP概述 Linux为我们提供了两个用于文件copy的命令,一个是cp,一个是scp,但是他们略有不同 CP ----- 主要是用于在同一台电脑上,在不同的目录之间来回copy文件 SCP ---  ...

  10. oracle系列笔记(2)---多表查询

    多表查询     这篇文章主要讲四点: (1)oracle多表查询    (2)SQL99标准的连接查询   (3)子查询     (4)分级查询 oracle多表查询有两种方式,一种是oracle所 ...