caioj 1067动态规划入门(一维一边推5: 乘积最大(高精度版))
2024-10-01 15:49:16
因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积
那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出
f[i][r] = max(f[j - 1][r - 1], num(j, i));
num(j, i)表示第j位到第i位的数,j < i
然后注意要用高精度来计算。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 112;
struct node
{
int len, s[MAXN];
node() { len = 0; memset(s, 0, sizeof(s)); }
};
int n, k, a[MAXN];
node f[MAXN][10], sum[MAXN][MAXN];
node cut(int x, int y)
{
node ret;
for(int i = y; i >= x; i--)
ret.s[++ret.len] = a[i];
return ret;
}
node cheng(node a, node b)
{
node ret;
REP(i, 1, a.len + 1)
REP(j, 1, b.len + 1)
{
ret.s[i + j - 1] += a.s[i] * b.s[j];
ret.s[i + j] += ret.s[i + j - 1] / 10;
ret.s[i + j - 1] %= 10;
}
int& i = ret.len = a.len + b.len - 1;
while(ret.s[i+1] > 0)
{
i++;
ret.s[i + 1] += ret.s[i] / 10;
ret.s[i] %= 10;
}
while(!ret.s[i] && i > 1) i--;
return ret;
}
node max_node(node a, node b)
{
if(a.len > b.len) return a;
else if(a.len < b.len) return b;
else
{
for(int i = a.len; i >= 1; i--)
{
if(a.s[i] > b.s[i]) return a;
else if(a.s[i] < b.s[i]) return b;
}
}
return a;
}
int main()
{
scanf("%d%d", &n, &k);
REP(i, 1, n + 1) scanf("%1d", &a[i]), f[i][0] = cut(1, i);
REP(i, 1, n + 1)
REP(j, i, n + 1)
sum[i][j] = cut(i, j);
REP(r, 1, k + 1) //乘号的循环在外面
REP(i, 1, n + 1)
for(int j = i; j > 1; j--) //这里大于1,边界要注意一下
f[i][r] = max_node(f[i][r], cheng(f[j - 1][r - 1], sum[j][i]));
node t = f[n][k];
for(int i = t.len; i >= 1; i--) printf("%d", t.s[i]);
puts("");
return 0;
}
最新文章
- OpenCV 轮廓基本特征
- cocoapods使用一直Updating local specs repositories的解决方案
- CSS之transition过渡练习
- html5新增及删除标签
- bootstrap模态框和select2合用时input无法获取焦点
- C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
- 浪潮之巅IT那点事之一——AT&;T的兴衰
- 一大早居然有骗子还是傻子,真是莫名其妙的,QQ1913522040,一看就是刚申请不久的
- css选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先
- NSFileHandle 、 沙箱机制 、 属性列表
- 《jave程序设计》第一周学习总结
- Twitter 登录和分享
- Objective-C开发图书推荐
- 命令格式 kill -3 pid
- 疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现
- Linux格式化分区报错Could not start /dev/sda No such file or directory 解决办法
- Windows 8.1 explorer.exe总是崩溃的解决办法
- 洛谷 P1231 教辅的组成
- web框架之Flask
- centos系统java后台运行(xshll关掉不至于jar程序结束)