经典dp(状态之间相互l利用)
来源:互联网 发布:原画场景培训网络班 编辑:程序博客网 时间:2024/05/12 20:27
注意这里的状态只能定义为d[ i ][ j ]表示i位置还没被确定采取什么高度,还可选的高度在j -n之间、
#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;#define rep(i,n) for(int (i)=0;(i)<(n);i++)#define Rep(i,n) for(int (i)=1;(i)<=(n);i++)const int maxn = 2110;int n,a[maxn],b[maxn];LL d[maxn][maxn];void init(){ Rep(i,n+1) Rep(j,n+1) d[i][j] = -1;}LL dp(int i,int j){ if(d[i][j]!=-1) return d[i][j]; if(i == n+1){ return d[i][j] = 0; } d[i][j] = dp(i+1,j)+abs(a[i]-b[j]); if(j<n) d[i][j]=min(d[i][j],dp(i,j+1)); return d[i][j];}LL dp2(int i,int j){ if(d[i][j]!=-1) return d[i][j]; if(i == n+1){ return d[i][j] = 0; } d[i][j] = dp2(i+1,j)+abs(a[i]-b[j]); if(j>1) d[i][j]=min(d[i][j],dp2(i,j-1)); return d[i][j];}int main(){ while(scanf("%d",&n)==1){ for(int i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]= a[i]; } sort(b+1,b+1+n); init(); LL ans = dp(1,1); init(); ans = min(ans,dp(1,n)); cout<<ans<<endl; } return 0;}
0 0
- 经典dp(状态之间相互l利用)
- 经典状态dp题目
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android:dp和px之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- mysql如何提高其查询速度的方法
- 获取用户呢称 Monxin专用(PHP代码函数)
- Python学习笔记———《文件操作》
- Java面试之Spring的bean的生命周期
- 更新11.2.0.2.12最新补丁集
- 经典dp(状态之间相互l利用)
- 神奇的UUID
- 机器学习算法与Python实践之(二)k近邻(KNN)
- 获取用户所在用户组名称 Monxin专用(PHP代码函数)
- Source insight 问题
- 获取用户账户状态 Monxin专用(PHP代码函数)
- 8大排序算法整理(更新~)
- tp3.2原生态关联表调取数据
- regular expression(1)