我是靠谱客的博主 激昂鲜花,最近开发中收集的这篇文章主要介绍SDUT3146:Integer division 2(整数划分区间dp),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:传送门

题目描述

This is a very simple problem, just like previous one.
You are given a postive integer n, and you need to divide this integer into m pieces. Then multiply the m pieces together. There are many way to do this. But shadow95 want to know the maximum result you can get.

输入

 First line is a postive integer t, means there are T test cases.
Following T lines, each line there are two integer n, m. (0<=n<=10^18, 0 < m < log10(n))

输出

 Output the maximum result you can get.

示例输入

1
123 2

示例输出

36

提示

You can divide "123" to "12" and "3".
Then the maximum result is 12*3=36.
 
题意很简单,但是我就是个渣渣,dp的题在比赛里从来没有A过,果断还是看了题解,也只是会了这个类型,其他类型的区间dp果断还是不会,果断不能举一反三啊。
 
代码如下:
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
typedef long long ll;
using namespace std;
#define mod 1000000007
int m,l;
char s[22];//局部变量与全局变量求字符串长度完全不同
ll a[20][20],dp[20][20];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",s+1);
        scanf("%d",&m);
        l=strlen(s+1);
        memset(a,0,sizeof(a));
        if(m==1||m==0)
        {
            printf("%sn",s+1);
            continue;
        }
        for(int i=1;i<=l;i++)
        {
            for(int j=i;j<=l;j++)
            {
                a[i][j]=a[i][j-1]*10+(s[j]-'0');
            }
        }
        memset(dp,0,sizeof(dp));
        for(int i=0;i<=l;i++)
            dp[i][1]=a[1][i];
        for(int j=2;j<=m;j++)
        {
            for(int i=j;i<=l;i++)
            {
                for(int k=1;k<i;k++)
                {
                    dp[i][j]=max(dp[i][j],dp[k][j-1]*a[k+1][i]);
                }
            }
        }
        printf("%lldn",dp[l][m]);
    }
    return 0;
}
 

 

 

最后

以上就是激昂鲜花为你收集整理的SDUT3146:Integer division 2(整数划分区间dp)的全部内容,希望文章能够帮你解决SDUT3146:Integer division 2(整数划分区间dp)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部