Educational Codeforces Round 16 E 题 Generate a String

原创 2016年08月30日 16:34:54

Generate a String
time limit per test
2 seconds
memory limit per test
512 megabytes
input
standard input
output
standard output

zscoder wants to generate an input file for some programming competition problem.

His input is a string consisting of n letters 'a'. He is too lazy to write a generator so he will manually generate the input in a text editor.

Initially, the text editor is empty. It takes him x seconds to insert or delete a letter 'a' from the text file and y seconds to copy the contents of the entire text file, and duplicate it.

zscoder wants to find the minimum amount of time needed for him to create the input file of exactly n letters 'a'. Help him to determine the amount of time needed to generate the input.

Input

The only line contains three integers nx and y (1 ≤ n ≤ 1071 ≤ x, y ≤ 109) — the number of letters 'a' in the input file and the parameters from the problem statement.

Output

Print the only integer t — the minimum amount of time needed to generate the input file.

Examples
input
8 1 1
output
4
input
8 1 10
output
8

     题意:输入一个数n,x,y  n表示生成字符的个数,每增加一个字符a需要x时间,是复制前面的串需要y时间。

   求生成n个字符a至少需要多长时间。

我们用dp[i]表示生成i个字符需要时间当i是偶数时,dp[i]=min(dp[i-1]+x,dp[i/2]+y)(增加或复制); 当i为奇数时,dp[i]=min(dp[i-1]+x,dp[(i+1)/2]+x+y)(增加或复制和删除)。



#include<stdio.h>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#include<stack>
#include<vector>
#include<string.h>
#include<map>
#define INF 0x3f3f3f3f3f
using namespace std;
long long dp[10000009];

int main()
{
    int n;
    long long  x,y;
    scanf("%d%I64d%I64d",&n,&x,&y);
    dp[0]=0;
    dp[1]=x;
    for(int i=2;i<=n;i++)
    {
        if(i%2==0)
            dp[i]=min(dp[i-1]+x,dp[i/2]+y);
        else
            dp[i]=min(dp[i-1]+x,dp[i/2+1]+y+x);
    }
    printf("%I64d\n",dp[n]);


}










版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Educational Codeforces Round 16 -- E. Generate a String (DP)

大体题意: 一开始你有一个空的字符串,你要得到n 个‘a’字符,  你插入或者删除一个‘a’需要x秒,复制目前的字符串需要y秒,求最少多少秒! 思路: 赛后补得,没有时间做了= =! dp思想...

Educational Codeforces Round 16 (A-E)

A. King Moves time limit per test 1 second memory limit per test 256 megabytes input standard ...

CF Educational Codeforces Round 6 E题 dfs+线段树

E. New Year Tree time limit per test3 seconds memory limit per test256 megabytes inputstandard in...

Codeforces 710E Generate a String【dp】好题!

E. Generate a String time limit per test 2 seconds memory limit per test 512 megabytes in...

【Educational Codeforces Round 1B】【字符串平移 水题】Queries on a String 字符串平移水题

B. Queries on a String time limit per test 2 seconds memory limit per test 256 megabytes...

Educational Codeforces Round 8(E. Zbazi in Zeydabad(树状数组优化))

题目链接:点击打开链接 题意:一个n*m矩阵, 里面的格子除了'z'就是'.',问有多少个z形图案。 思路:因为n和m很大, 即使n^3复杂度也会超时。  如果按照最朴素的方法, 我们可以处理一下...

Educational Codeforces Round 8 E - Zbazi in Zeydabad

http://codeforces.com/contest/628/problem/E L[i][j]  表示(i,j)左边连续的‘z’个数 R[i][j] 表示右边 D[i][j] 从...

Educational Codeforces Round 2 E - Lomsat gelral(树形dp+启发式合并)

题意: 给定N≤105的一棵树,每个节点有一个颜色,求出每个节点所在子树中出现最多的颜色的颜色ID和给定N\le 10^5的一棵树, 每个节点有一个颜色, 求出每个节点所在子树中出现最多的颜色的颜...
  • lwt36
  • lwt36
  • 2016年01月23日 23:25
  • 418

【Educational Codeforces Round 2E】【STL-map 启发式合并 or 线段树动态开节点 】Lomsat gelral 一棵树每点一个颜色问每个节点子树的颜色众数之和

E. Lomsat gelral time limit per test 2 seconds memory limit per test 256 megabytes ...

Educational Codeforces Round 1 E Chocolate Bar(dp)

题意: 给定N∗M(N,M≤30)的巧克力,现在要吃掉K≤50的面积的给定N*M(N,M\le 30)的巧克力, 现在要吃掉K\le 50的面积的 且要求吃掉的一定是长方形,剩余部分的形状不...
  • lwt36
  • lwt36
  • 2016年01月19日 22:32
  • 370
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Educational Codeforces Round 16 E 题 Generate a String
举报原因:
原因补充:

(最多只允许输入30个字)