暑假集训Day1 整数划分
题目大意:
如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大。N、M从键盘输入,输出最大值及一种划分方式。
输入格式:
第一行一个正整数T(T<=10000),表示有T组数据。
接下来T行每行两个正整数N,M。
输出格式
对于每组数据
第一行输出最大值。
第二行输出划分方案,将N按顺序分成M个数输出,两个数之间用空格格开。
算法分析:
第一问求dp值就是简单的dp 具体实现可参见 暑假集训day1 水题 乘法最大
1.做第一问的时候注意这个题给出的M并不是乘号数量而是分成的份数,所以读入M之后记得M-1,到后面便历乘号数量j的时候也是min(i-1,m)。
2.记录路径的方法也跟平时记录路径一样,如果更改了dp的值说明在这个位置插入了乘号,就让path[i][j] = k(k记录断点,i记录前i个数字,j表示共有j个乘号)
3.最后递归输出就可以了,递归函数传参x为当前为前x个数字,t表示还有t个乘号没有插入
(注意一个细节,递归边界是t=-1而不是t=0,因为t等于0的时候表示的是有0个乘号但是仍然是分成一份,即仍然有值,只有当t遍历到-1的时候才说明没有东西可以递归了)
代码展示
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+10;
int a[maxn],n,T,path[maxn][maxn],m;
long long dp[maxn][maxn],sum[maxn][maxn];
char s[maxn];
void clear(){
n = strlen(s+1);
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
for(int i = 1;i <= n;++i)
for(int j = i;j <= n;++j)
sum[i][j] = sum[i][j-1]*10 + s[j] - '0';
for(int i = 1;i <= n;++i)dp[i][0] = sum[1][i];
return ;
}
void Path(int x,int t){
if(t == -1)return;
Path(path[x][t],t-1);
printf("%lld ",sum[path[x][t]+1][x]);
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%s %d",s+1,&m);m--;
clear();
for(int i = 1;i <= n;++i){
for(int j = 1;j <= min(i-1,m);++j)
for(int k = 1;k < i;++k){
if(dp[i][j] < dp[k][j-1]*sum[k+1][i]){
dp[i][j] = dp[k][j-1]*sum[k+1][i];
path[i][j] = k;
}
}
}
printf("%lld\n",dp[n][m]);
Path(n,m);
printf("\n");
}
return 0;
}
制作不易,关注走起>)<
暑假集训Day1 整数划分的更多相关文章
- 暑假集训day1 水题 乘法最大
题目大意:有一个长度为N的字符串,要求用K个乘号将其分成K+1个部分,求各个部分相乘的最大值 输入:第一行输入N和K,第二行输入一个长度为N的字符串 算法分析 1. 这个题只是一个简单的dp(甚至连区 ...
- 整数划分 (区间DP)
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- ACM 整数划分(四)
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- 考前停课集训 Day1 废
[友情链接] Day1 今天模拟赛倒数…… 感觉自己菜到爆炸…… 被一个以前初一的倒数爆踩…… 感觉自己白学了. 满分400,自己只有100.真的是倒数第一…… 做了一个T2,其他暴力分全部没有拿到… ...
- nyoj746 整数划分(四)
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到 ...
- 「疫期集训day1」无言
正式集训第一天,感觉没啥特别大的感受,无非是奥赛时间延长了,效率提高了,身外事少了 当然不止这些 感受1:有些曾经被恶的题现在仍然在恶心,例如昨天的farmcraft,今天的整数划分(和着多边形一块调 ...
- NYOJ746——整数划分(四)
描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整 ...
随机推荐
- StackOverflow 创始人关于如何高效编程的清单.md
这是 StackOverflow 联合创始人 Jeff Atwood 注释的十戒.程序员普遍有很强的自尊心,都应该看看本文,打印下来时刻提醒自己. "无我编程"发生在开发阶段,表现 ...
- Java-接口(另类抽象)
1.1 特点 用interface定义 接口中所有成员变量都默认是由public static final修饰的 接口中所有方法都默认是由public abstract修饰的 接口没有构造器 接口采用 ...
- HashiCorp遭禁不必过于担忧,博云云管产品自主可控
近日,国外知名 DevOps 服务商 HashiCorp 官网相关条款页面更新,声明中表示禁止在中国使用其 Vault 企业版产品,此事件引发国内开源界广泛关注. HashiCorp解释是由于中国的出 ...
- Rocket - debug - Example: Selecting Harts
https://mp.weixin.qq.com/s/HjG5S9binyniG_amC3Dr5Q 介绍riscv-debug的使用实例:如何选择核心,执行Halt/Resume请求. 1. Sele ...
- cmd启动mysql,服务名无效
通过cmd无法启动mysql 解决办法: 在计算机管理(或者win+R,输入services.msc)中打开服务,查看mysql服务的名称是否正确. 键入正确的名称启动mysql.
- Redis 入门到分布式 (三) Redis客户端的使用
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Java客服端:jedis 获取Jedis Jedis基本使用 Jedis连接池使用 1.Jedis ...
- Java实现 蓝桥杯VIP 基础练习 字符串对比
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...
- Java实现 LeetCode 6 Z字形变换
6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- Java实现 蓝桥杯VIP 算法提高 change
算法提高 change 时间限制:1.0s 内存限制:256.0MB 问题描述 数组A中共有n个元素,初始全为0.你可以对数组进行两种操作:1.将数组中的一个元素加1:2.将数组中所有元素乘2.求将数 ...
- 【asp.net core 系列】4. 更高更强的路由
0. 前言 在之前我们介绍了请求通过路由寻找到控制器,以及控制器与视图的数据流转.那么,我们回过头来,再看看路由的一些其他用法. 1. 路由属性(Route Attribute) 按照英文的直接翻译, ...