zoukankan      html  css  js  c++  java
  • [CF710E] Generate a String

    [CF710E] Generate a String - dp,结论

    Description

    给定正整数 n,x,y,生成一个长度为 n 的字符串,有两种操作:添加或者删除一个字符代价为 x;将已有的字串翻倍代价为 y,求生成任意一个长度为 n 的字符串的最小代价。

    Solution

    性质:删除操作一定不会连续进行超过一次

    所以我们把删除的情况手工枚举了,这样转移的拓扑结构就变成线性的了

    具体地,当 i 是偶数时,转移来源为 (i-1, frac i 2)

    当 i 时奇数时,转移来源为 (i-1, frac {i+1} 2)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 10000005;
    
    int f[N];
    int n, x, y;
    
    signed main()
    {
        ios::sync_with_stdio(false);
        cin >> n >> x >> y;
        for (int i = 1; i <= n; i++)
        {
            if (i & 1)
                f[i] = min(f[i - 1] + x, f[(i + 1) / 2] + x + y);
            else
                f[i] = min(f[i - 1] + x, f[i / 2] + y);
        }
        cout << f[n] << endl;
    }
    
  • 相关阅读:
    数组与方法
    数据类型
    认识Java(2)
    认识Java(1)
    面试题集锦
    00-python语言介绍
    06-python-生成器、循环器
    00-python-内置函数笔记
    04-python-闭包
    03-python-装饰器
  • 原文地址:https://www.cnblogs.com/mollnn/p/14398168.html
Copyright © 2011-2022 走看看