我是靠谱客的博主 无奈豆芽,最近开发中收集的这篇文章主要介绍区间dp—整数划分,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目地址

http://acm.nyist.net/JudgeOnline/problem.php?pid=746

先输入一个整数n,再输入一个数字m,将n分成m - 1 组,使得这m-1组的乘积最大。

代码如下

#include<algorithm>
#include<string.h>
#include<string>
#include<cstdio>
#include<iostream>


using namespace std;


typedef long long ll;


ll func(string s,int l,int r)
{
ll k,ans;

k = 1;
ans = 0;

for(int i = r;i >= l;i --)
{
ans = ans + (s[i] - '0') * k;
k *= 10;
}

return ans;
}


int main()
{
int t,i,j,k,l,m,flag;
string s;
ll ans,dp[50][50],a[50][50];

scanf("%d",&t);
getchar();

while(t --)
{
cin >> s;
cin >> m;

memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));

for(i = 0;i < s.size();i ++)
{
for(j = i;j < s.size();j ++)
{
a[i][j] = func(s,i,j);
}
}

for(i = 0;i < s.size();i ++)
{
dp[i][0] = a[0][i];
}

for(l = 1;l < m;l ++)
{
for(i = l - 1;i < s.size();i ++)
{
for(k = 0;k < i;k ++)
{
dp[i][l] = max(dp[i][l],dp[k][l - 1] * a[k + 1][i]);
}
}
}


cout<<dp[s.size() - 1][m - 1]<<endl;

}

return 0;
}

最后

以上就是无奈豆芽为你收集整理的区间dp—整数划分的全部内容,希望文章能够帮你解决区间dp—整数划分所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部