首页 > 其他分享 >E. Generate a String(典:贪心+动态规划)

E. Generate a String(典:贪心+动态规划)

时间:2023-05-08 17:45:32浏览次数:43  
标签:10 String int leq 代价 Generate 贪心

题目

E. Generate a String

题意

  • 输入三个不同的整数 \(n(1 \leq n \leq 10^7),x,y(1 ≤ x, y ≤ 10^9)\)。
  • 从 0 开始,每次可以 + 1 , - 1 ,代价是x,或者当前值 * 2,代价是y
  • 问怎样才能到达n用最小的代价

思路

  • 第一方法是暴力搜索,但是数据过大,不行
  • 观察发现,如果从n出发,做所有操作的逆操作(*2变为/2),答案集合数量较少
  • 当n为偶数时,才能除2
  • 连续执行两次+1或者-1然后再/2,不如先/2然后再-1+1
  • 当n为奇数时,只能+1或者-1
  • 用线性dp异常简洁
  • 定义f[i]表示到达i的最小代价
  • f[i] = min(f[i-1] + x,f[(i+1)/2] + y + (i&1)*x);

代码

const int N = 2e7 + 10;
int f[N];

void solve()
{
    int n, x, y;
    cin >> n >> x >> y;
    for (int i = 1; i <= n;i ++)
    {
        f[i] = min(f[i - 1] + x, f[(i + 1) / 2] + y + (i & 1) * x);
    }
    cout << f[n] << endl;
}

标签:10,String,int,leq,代价,Generate,贪心
From: https://www.cnblogs.com/cfddfc/p/17382464.html

相关文章

  • 第6-0讲,StringVar用法
    在tkinter中,StringVar是一种特殊的变量类型,用于存储字符串值,它可以与用户界面中的组件关联,以便在用户界面中显示和更新变量的值。StringVar的常用方法:get():获取StringVar对象的值。set(value):设置StringVar对象的值为value。trace(callback):为StringVar对象添加回调函数,当Str......
  • String字符串替换方法
    importjava.util.Scanner;publicclassStringTest5{/***键盘录入一个字符串,如果里面包含(TMD),用***替换*/publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println("请输入字符串:");......
  • String字符串的切割方法
    publicclassStringDemo{publicstaticvoidmain(String[]args){Strings="123,345,667";String[]aarr=s.split(",");for(inti=0;i<aarr.length;i++){System.out.println(aarr[i]);......
  • (hdu step 9.1.2)Doing Homework again(贪心——有n份作业,每份作业都有一定的完成时
    题目:DoingHomeworkagainTimeLimit:1000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):63AcceptedSubmission(s):57 ProblemDescriptionIgnatiushasjustcomebackschoolfromthe30thACM/ICPC.Nowheha......
  • 拼接最大数(栈、贪心)、发奖金问题、二叉搜索树迭代器(栈、树)
    拼接最大数(栈、贪心)给定长度分别为m和n的两个数组,其元素由0-9构成,表示两个自然数各位上的数字。现在从这两个数组中选出k(k<=m+n)个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大......
  • Codeforces 1817F - Entangled Substrings(SA)
    为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?为什么赛时不开串串题?一种SA做法,本质上和SAM做法等价,但是说来也丢人,一般要用到SAM的题我都是拿SA过的/wul考虑将\(ac\)看作一个整体。记\(\text{occ}(S)\)为\(S\)出现位置的集......
  • (转)Java中的String、StringBuilder和StringBuffer
    1、StringString对象是不可变的,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。那么我们new一个String对象,比如Stringa=newString("A")Stringa2=newString("A")和直接创建一个字符串,比如Stringb="A"这两种方......
  • LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是LeetCode第343场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。往期回顾:L......
  • JAVA中的两个容器StringBuilder和StringJoiner概述
    JAVA中的两个容器StringBuilder和StringJoiner概述StringBuilder可以看成一个容器,创建之后里面的内容是可以修改的方法名说明publicStringBuilderappend(任意类型)添加数据,并返回对象本身publicStringBuilderreverse()反转容器中的内容publicintlength()返......
  • String、StringBuilder、StringBuffer
    String真正不可变有下面几点原因:保存字符串的数组被final修饰且为私有的,并且String类没有提供/暴露修改这个字符串的方法。String类被final修饰导致其不能被继承,进而避免了子类破坏String不可变。String:不可变,线程安全StringBuilder:可变,单线程,线程不安全StringBuf......