题目链接

https://atcoder.jp/contests/agc032/tasks/agc032_d

题解

又是一道神仙题啊啊啊啊。。。atcoder题真的做不来啊QAQ

第一步又是神仙转化: 对于把第一个挪到最后其他左移这件事情,可以转化为把第一个挪到最后和最后的下一个之间的某个位置(非整数),右移同理。

于是问题就变成了: 有\(N\)个数一开始每个数有个位置,现在可以花\(A\)的代价把一个数往右移到任意位置(不一定非是整数),\(B\)的代价把一个数往左移到任意位置,然后求将它们排序的最小代价和!

这个东西又是一个简单的dp,设\(dp[i][j]\) (\(0\le j\le n\))表示前\(i\)个数排好序,第\(i\)个放在区间\([j,j+1)\)内的最小代价,转移非常容易(注意要对不移动的情况单独考虑),前缀和优化,时间复杂度\(O(N^2)\).

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<iostream>
#include<algorithm>
#define llong long long
using namespace std; inline int read()
{
int x=0; bool f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0');
if(f) return x;
return -x;
} const int N = 5000;
const llong INF = 10000000000000000ll;
int p[N+3],pp[N+3];
llong dp[N+3][N+5],sdp[N+3][N+5];
int n; llong arga,argb; void update(llong &x,llong y) {x = x<y?x:y;} int main()
{
scanf("%d%lld%lld",&n,&arga,&argb);
for(int i=1; i<=n; i++) {scanf("%d",&p[i]); pp[p[i]] = i;}
for(int i=0; i<=n; i++) for(int j=0; j<=n; j++) dp[i][j] = sdp[i][j] = INF;
for(int i=0; i<=n; i++) sdp[0][i] = dp[0][i] = 0ll;
for(int i=1; i<=n; i++)
{
for(int j=0; j<=n; j++)
{
if(j==pp[i]) {update(dp[i][j],sdp[i-1][j-1]);}
llong tmp = sdp[i-1][j]+(j<pp[i]?argb:arga);
update(dp[i][j],tmp);
// printf("dp[%d][%d]=%lld\n",i,j,dp[i][j]);
}
sdp[i][0] = dp[i][0];
for(int j=1; j<=n; j++) sdp[i][j] = min(sdp[i][j-1],dp[i][j]);
}
llong ans = sdp[n][n];
printf("%lld\n",ans);
return 0;
}

最新文章

  1. CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总
  2. test homework2 ~ faulty program
  3. MVC、ORM、CURD、ActiveRecord、单一入口的概念
  4. dojo 十 ajax dojo/_base/xhr
  5. knowledge
  6. dubbo使用方法
  7. java学习——IO流
  8. Jasper_filter data_pass field data from main to sub to filter some data
  9. Guava API学习之Preconditions优雅的检验参数 编辑
  10. mongodb操作记录
  11. java泛型 之 入门(interface)
  12. 网站引导页flash动画跳转js脚本
  13. FFT Cheetsheet
  14. CodeForces - 779D
  15. WSAAsyncSelect模型中,FD_WRITE事件什么时候触发?
  16. Zero-Copy技术
  17. 【Coursera】Security Introduction -Ninth Week(2)
  18. vue 实现父组件和子组件之间的数据双向绑定
  19. 清理linux 某个文件夹下面所有的log文件
  20. hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)

热门文章

  1. Java中this与super的区别
  2. [BZOJ 2002] [HNOI2010]弹飞绵羊(Link Cut Tree)
  3. ORM中的锁和事务
  4. CSS3鼠标滑过图片3D旋转动画
  5. springboot拦截中自动注入的组件为null问题解决方法
  6. Design Support库中的控件
  7. 深入理解hive基础学习
  8. python 练习合集一
  9. Notepad++ 文件丢失了,找回历史文件方法
  10. symfony3 yml配置文件详解