码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj-746

时间:2015-09-02 00:11:27      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

整数划分(四)

时间限制: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
来源
经典题目
上传者
TC_胡仁东
技术分享
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define _cle(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define repd(i, a, b) for(int i = b; i >= a; i--)
#define sfi(n) scanf("%d", &n)
#define pfi(n) printf("%d\n", n)
#define sfi2(n, m) scanf("%d%d", &n, &m)
#define pfi2(n, m) printf("%d %d\n", n, m)
#define pfi3(a, b, c) printf("%d %d %d\n", a, b, c)
#define MAXN 205
const int INF = 0x3f3f3f3f;
ll a[20];
ll dp[20][20];
char s[MAXN];
void get()
{
    a[0] = 1;
    repu(i, 1, 20) a[i] = a[i - 1] * 10 + 1;
}
int main()
{
    get();
    int T;
    sfi(T);
    while(T--)
    {
        _cle(dp, 0);
        scanf("%s", s);
        int n = strlen(s), k;
        sfi(k);
        repu(i, 1, n + 1)
        {
            dp[i][0] = a[i - 1];
            repu(j, 1, k + 1)
            repu(p, 1, i)
            dp[i][j] = max(dp[i][j], dp[p][j - 1] * a[i - p - 1]);
        }
        printf("%lld\n", dp[1][n + 1]);
    }
    return 0;
}
View Code

 

nyoj-746

标签:

原文地址:http://www.cnblogs.com/sunus/p/4777029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!