DP两道关于递增非递增的题目
来源:互联网 发布:手机淘宝2015旧版5.7.2 编辑:程序博客网 时间:2024/05/20 10:56
POJ - 3666
首先我们会发现,最终修改后,或者和前一个数字一样,或者和后一个数字一样,这样才能修改量最小。
- 不严格递减最后修改完成后的各个数一定是原序列中的某一个数
这个大概可以这么理解:原序列,从左到右扫过去,如果左边的大于右边的,要嘛左边的减掉使其等于右边的,要嘛右边的加上使其等于左边的。
那个思路是这样:dp[i][j] = min(dp[i-1][k])+a[i]-b[j], 1<=k<=j。dp[i=当前考虑的前i个数][j=第i个数在总序列中排第j小]=当前的情况的最小改动量。什么意思呢,就是求当前dp[i][j]时候,考虑前i-1个数字,取第i-1个数字在第k(k=1…j)小中的最小改动量,再加上第i个数字成为第j小的改动量。
#include<iostream>#include<cmath>#include<algorithm>using namespace std;const int N=2010;int n;int a[N];int b[N];int dp[N][N];int main(){ int i,j,k,ans; cin>>n; for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++) b[i]=a[i]; sort(b+1,b+1+n,cmp); for(j=1;j<=n;j++){ dp[1][j]=a[1]-b[j]; if(dp[1][j]<0) dp[1][j]=-dp[1][j]; } for(i=2;i<=n;i++) // 非严格递增 { k=dp[i-1][1]; for(j=1;j<=n;j++) { k=min(dp[i-1][j],k);//这里k是用来维护1~k(j)中最小的dp[i][j]的
dp[i][j]=k+abs(a[i]-b[j]); //dp[i][j] = min{dp[i - 1][0...j] + ?abs(a[i] - b[j])} } } ans=dp[n][n]; for(i=n;i>=1;i--) ans=min(ans,dp[n][i]); printf("%d\n",ans); return 0;}
Sonya and Problem Wihtout a Legend
CodeForces - 713C
就变了一下,用了什么公式就把单调递增变为非单调递增了
- #include <cstdio>
- #include <algorithm>
- #include <iostream>
- using namespace std;
- int a[3100],b[3100];
- long long dp[3100][3100];
- int main()
- {
- int n;
- scanf("%d",&n);
- for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]-=i,b[i]=a[i];
- sort(b+1,b+1+n);
- for(int i=1;i<=n;i++)
- {
- long long mn=dp[i-1][1];
- for(int j=1;j<=n;j++)
- {
- mn=min(mn,dp[i-1][j]);
- dp[i][j]=mn+abs(a[i]-b[j]);
- }
- }
- long long ans=dp[n][1];
- for(int i=2;i<=n;i++) ans=min(ans,dp[n][i]);
- cout<<ans;
- return 0;
- }
0 0
- DP两道关于递增非递增的题目
- 题目:[NOIP1999]拦截导弹(最长非递增子序列DP) O(n^2)和O(n*log(n))的两种做法
- nyoj44 nyoj17 HDU1087 DP动规 连续字符串的和最大值 单调递增最长子序列 单调递增子序列最小个数 非连续最大递增子序列
- !递增 !
- 递增
- HDU1069 Monkey and Banana DP非连续单调递增序列的最大和的变种
- HDU1087 Super Jumping! Jumping! Jumping! DP求非连续单调递增序列的最大和
- NYOJ 题目17 单调递增最长子序列 (DP)
- NYOJ 题目214 单调递增子序列(二) dp+二分
- 笔试算法学习--dp规划(最长非递增子序列)
- 【LIS】【严格递增和非严格递增】
- 最大递增/递减/非递增/非递减子序列的长度(二分优化)
- 关于 递增字段 的查询操作
- 关于递增运算符
- 递增排序,递减排序,非递减排序,非递增排序
- 非递减排列 非递增排列 递减排列 递增排列
- NYOJ 题目17 单调递增最长子序列 (DP) hdu 题目2845 Bean
- 合并两递增链表
- 关于上转型对象与强制转换
- html5初入门第一堂
- SSL常见加密算法
- jquery DOM内部插入append()与appendTo()
- 工作中Django总结之一(项目)
- DP两道关于递增非递增的题目
- SQL语句AND&OR
- 深度学习Imagenet caffe AlexNet 实验步骤
- 携程技术面试官素质。。。。。。哎
- 检查内存泄露
- 微信公众号支付(服务商模式)
- 见字如面,T3420为专业而生
- php 字符串
- 音乐会的等待【单调栈】