整数划分(四)

时间限制: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 20long 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 = 0; k < m; k++){for(i = 0; i < n; i++){for(j = i + k; j < n; j++){if(k == 0){strncpy(temp, num+i, j-i+1);temp[j-i+1] = '\0';mm[i][j][k] = atoll(temp);}else{long long res = -1;for(l = 0; l < j-i; l++){int o, k1=0, k2=0;for(o = 0; o < l+1 && o < k; o++){k1 = o;k2 = k - 1 - k1;long long tRes = mm[i][i+l][k1] * mm[i+l+1][j][k2];res = res > tRes ? res:tRes;}                        }mm[i][j][k] = res;}}}}cout << mm[0][n-1][m-1] << endl;}return 0;
}

dp区间算法

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

转载于:https://www.cnblogs.com/sdlwlxf/p/4605788.html

ACM 整数划分(四)相关推荐

  1. hdu 5230(整数划分,dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5230 解题思路: 这是一个整数划分的模型: 将n划分为k个整数的划分数 设dp[i][j]为将i划分为 ...

  2. 实验一 分治与递归—整数划分 java实现

    基本题一:基本递归算法 一.实验目的与要求 1.  熟悉Java语言的集成开发环境: 2.通过本实验加深对递归过程的理解 二.实验内容: 掌握递归算法的概念和基本思想,分析并掌握"整数划分& ...

  3. 整数划分 --- 一个老生长谈的问题 动态规划

    整数划分 --- 一个老生长谈的问题: 1) 练练组合数学能力. 2) 练练递归思想 3) 练练DP 总之是一道经典的不能再经典的题目: 这道好题求: 1. 将n划分成若干正整数之和的划分数. 2. ...

  4. NYOJ 整数划分(三) (划分数大集合)

    题意:虽然是中文题意但是还是想上一下题 题目描述 整数划分是一个经典的问题.请写一个程序,完成以下要求. 输入 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k ...

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

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

  6. C语言接收一个整数划分成5的倍数,整数划分为连续整数;整数划分

    参考博客:http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1192308.html 1.整数划分为连续整数: 如将15划分为连续整数之和: 15 ...

  7. 51nod 1201:整数划分 超级好的DP题目

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...

  8. 算法笔记——整数划分1

    题目来源:NYOJ90 问题描述: 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个 ...

  9. Acwing900. 整数划分[计数类dp]:完全背包解法

    文章目录 题目分析 完全背包解法 题目链接 题目分析 完全背包解法 请复习完全背包模板完全背包dp优化内有完整标准完全背包的推导过程 状态表示: f[i][j]f[i] [j]f[i][j] 表示从 ...

最新文章

  1. 公平锁与非公平锁源码对比
  2. Mantis使用说明
  3. 几何着色器与细分(镶嵌)着色器
  4. 【CyberSecurityLearning 16】单臂路由与DHCP中继+ ICMP协议+VTP
  5. 12如何隐藏dock栏_一键隐藏 iPhone 刘海和底部 Dock 栏,简洁又好看
  6. 单进程epoll版-TCP服务器(python 版)
  7. python查询mysql数据库_用python操作mysql数据库(之简单查询操作)
  8. mini2440驱动分析之PWM
  9. 英雄联盟更新防沉迷规则:未成年用户节假日每日限玩3小时
  10. Mybatis的SQL注入
  11. Number()、parseInt() 和 parseFloat() 的区别
  12. python copy.copy和copy.deepcopy
  13. android singleTask使用情况,场景分析
  14. java.math.BigDecimal详解及加减乘除计算
  15. 电商分析需要重点关注的核心指标
  16. r4900g3系统安装linux_H3C UniServer R4900 G3
  17. Perl(十五)BEGIN和END
  18. [Unity 代码写法整理]嵌套判断问题(一)
  19. ThinkPad S5 升级安装Windows10后 连上网络后系统假死
  20. Unity编辑器扩展-生成prefab的预览图并保存为图片

热门文章

  1. 大数据之-Hadoop3.x_MapReduce_自定义序列化步骤---大数据之hadoop3.x工作笔记0095
  2. mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042
  3. k8s核心技术-集群安全机制(概述)---K8S_Google工作笔记0038
  4. STM32工作笔记0032---编写跑马灯实验---寄存器版本
  5. 数据库工作笔记016---SqlServer2016_日期处理_ntext和text区别_开启远程连接_查看系统COm组件_Browser服务无法启动_导出数据_字符串前加N
  6. 数据库工作笔记008---pg_hba.conf entry for host “192.168.2.111”, user “gpadmin”, database “template1”, SSL
  7. SpringCloud学习笔记022---SpringBoot中集成使用MongoDb进行增删改查
  8. pytorch 训练人脸精度不达标
  9. Struts2 + Hibernate + Spring 以及javaweb模块问题解决(2)
  10. leetcode400. 第 N 位数字