热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

codeforces710EGenerateaString(dp)

题意:给你一个n(1e7),和x,y每次可以1-1*2-花费x,*2花费y问你从0变到n的最小花

题意:

给你一个n(1e7),和x,y

每次可以+1/-1/*2

+-花费x,*2花费y

问你从0变到n的最小花费

思路:

关键是n小啊~

对于每个i,他可能是由i-1加了1

或者i/2乘了2得来的

当前是奇数的时候,可能是i/2*2+1或者(i/2+1)*2-1得来的

前者在i-1加了1里包含了,所以只需要比较后者

/* ***********************************************
Author :devil
************************************************
*/
#include

#include

#include

#include

#include

#include

#include
<set>
#include

#include

#include
<string>
#include

#include

#define LL long long
#define rep(i,a,b) for(int i&#61;a;i<&#61;b;i&#43;&#43;)
#define dep(i,a,b) for(int i&#61;a;i>&#61;b;i--)
#define ou(a) printf("%d\n",a)
#define pb push_back
#define mkp make_pair
template
<class T>inline void rd(T &x)
{
char c&#61;getchar();x&#61;0;while(!isdigit(c))c&#61;getchar();while(isdigit(c)){x&#61;x*10&#43;c-&#39;0&#39;;c&#61;getchar();}
}
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);
using namespace std;
const int inf&#61;0x3f3f3f3f;
const int mod&#61;1e9&#43;7;
const int N&#61;1e7&#43;10;
LL dp[N],n,x,y;
int main()
{#ifndef ONLINE_JUDGEIN
#endifrd(n),rd(x),rd(y);dp[1]&#61;x;for(int i&#61;2;i<&#61;n;i&#43;&#43;){dp[i]&#61;dp[i-1]&#43;x;if(i&1) dp[i]&#61;min(dp[i],dp[i/2&#43;1]&#43;x&#43;y);else dp[i]&#61;min(dp[i],dp[i>>1]&#43;y);}printf("%I64d\n",dp[n]);return 0;
}

 

转:https://www.cnblogs.com/d-e-v-i-l/p/5947237.html



推荐阅读
author-avatar
mobiledu2502891023
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有