当前位置: 首页 > news >正文

【CodeForces】713 C. Sonya and Problem Wihtout a Legend

【题目】C. Sonya and Problem Wihtout a Legend

【题意】给定n个数字,每次操作可以对一个数字±1,求最少操作次数使数列递增。n<=10^5。

【算法】动态规划+前缀和优化

【题解】★令b[i]=a[i]-i,则a[i]递增等价于b[i]不递减

这样做之后,显然数字加减只能到b[i]中出现的数字,而不会出现其它数字。

令f[i][j]表示前i个数,第i个数字大小为c[j](第j大的数字)的最少操作次数。

f[i][j]=abs(b[i]-c[j])+min{f[i-1][k]},k<=j

令g[i][j]表示min{f[i][k]},k<=j,则有:

g[i][j]=min{ g[i][j-1],abs(b[i]-c[j])+g[i-1][j] }

初始g[0][i]=0。

复杂度O(n^2)。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define ll long long
#define lowbit(x) x&-x
using namespace std;
int read(){
    char c;int s=0,t=1;
    while(!isdigit(c=getchar()))if(c=='-')t=-1;
    do{s=s*10+c-'0';}while(isdigit(c=getchar()));
    return s*t;
}
int min(int a,int b){return a<b?a:b;}
int max(int a,int b){return a<b?b:a;}
int ab(int x){return x>0?x:-x;}
//int MO(int x){return x>=MOD?x-MOD:x;}
//void insert(int u,int v){tot++;e[tot].v=v;e[tot].from=first[u];first[u]=tot;}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f,maxn=3010;

int n,a[maxn],b[maxn];
ll f[maxn][maxn];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)a[i]=read()-i,b[i]=a[i];
    sort(b+1,b+n+1);
    int x=0;
    for(int i=1;i<=n;i++)f[x][i]=0;
    for(int i=1;i<=n;i++){
        x=1-x;f[x][0]=1ll<<60;
        for(int j=1;j<=n;j++)f[x][j]=min(f[x][j-1],ab(b[j]-a[i])+f[1-x][j]);
    }
    printf("%lld",f[x][n]);
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/8305090.html

相关文章:

  • Python处理CSV,Excel,PDF和图片
  • 如何保障研发质量不踩坑?阿里技术专家教你几招
  • 小型公司案例 -- 局域网故障排查
  • Future 模式简介
  • 【24】线程池
  • 内存优化问题
  • NPM测试模块之rewire教程
  • 解决PHP编译cURL的reinstall the libcurl问题
  • 关于selenium webdriver chromedriver下载的问题
  • php多进程实现
  • hihoCoder 1513 小Hi的烦恼
  • 生鲜电商大乱斗,谁生在了终点线?
  • 华为实验作业:冗余链路、虚拟路由冗余协议 2018/1/23
  • Mac上的远程控制软件——TeamViewer
  • openlayers3 自定义鹰眼缩略图
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 2017前端实习生面试总结
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • create-react-app做的留言板
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • java8-模拟hadoop
  • Java程序员幽默爆笑锦集
  • java正则表式的使用
  • mysql_config not found
  • node学习系列之简单文件上传
  • PHP的Ev教程三(Periodic watcher)
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • supervisor 永不挂掉的进程 安装以及使用
  • 百度小程序遇到的问题
  • 初识 beanstalkd
  • 从伪并行的 Python 多线程说起
  • 关于 Cirru Editor 存储格式
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 时间复杂度与空间复杂度分析
  • 实现简单的正则表达式引擎
  • 字符串匹配基础上
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ###C语言程序设计-----C语言学习(6)#
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (分类)KNN算法- 参数调优
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (四)Linux Shell编程——输入输出重定向
  • (一)Dubbo快速入门、介绍、使用
  • (一)WLAN定义和基本架构转
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 提取注释生成API文档 帮助文档