1711: 上升序列 (动态规划)
来源:互联网 发布:js去除数组的重复元素 编辑:程序博客网 时间:2024/06/05 13:46
1711: 上升序列
时间限制: 1 Sec 内存限制: 128 MB提交: 33 解决: 6
[提交][状态][讨论版]
题目描述
我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增(严格递增即相邻元素不存在相等的情况)。其中无论是修改前还是修改后,每个元素都必须是整数。 请输出最少需要修改多少个元素。
输入
第一行输入一个T(1≤T≤10),表示有多少组数据
每一组数据:
第一行输入一个N(1<N<100000)表示数列的长度
第二行输入N个数每一个数列中的元素都是正整数而且不超过1e6. ,
输出
对于每组数据,先输出一行
Case #i:
然后输出最少需要修改多少个元素。
样例输入
2 2 1 10 3 2 5 4
样例输出
Case #1:
0
Case #2:
1
#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#define MAXN 100100#define INF 0xfffffff#define max(a,b) a>b?a:b#define min(a,b) a>b?b:ausing namespace std;int num[MAXN];int dp[MAXN];int main(){int t,n;int i,j,M;int cas=0;scanf("%d",&t);while(t--){scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&num[i]);memset(dp,0,sizeof(dp));for(i=0;i<n;i++){M=-INF;for(j=0;j<i;j++){if(num[j]<num[i]&&num[i]-num[j]>i-j-1){if(dp[j]>M)M=dp[j];}}if(M!=-INF)dp[i]=M+1;elsedp[i]=1;}int MAX=0;for(i=0;i<n;i++){if(MAX<dp[i])MAX=dp[i];} printf("Case #%d:\n",++cas);printf("%d\n",n-MAX);}return 0;}
0 0
- 1711: 上升序列 (动态规划)
- 动态规划(最长上升子序列)
- 最长上升子序列(动态规划)
- 最长上升子序列(动态规划)
- 上升子序列(动态规划)
- 最长上升子序列(动态规划)
- 最长上升序列(动态规划)
- 上升子序列(动态规划
- 最长上升子序列问题(动态规划)
- 动态规划-最长上升子序列(LIS)
- HDU 1257(贪心;动态规划(最长上升子序列))
- sdut1299 最长上升子序列(动态规划)
- 动态规划(DP)之最长上升子序列
- 【动态规划】最长上升子序列(LIS)
- 动态规划 最长上升子序列(LIS)
- 最长上升子序列问题-动态规划(DP)
- 动态规划(DP)之最长上升子序列问题
- 动态规划:最长上升子序列(二分算法 nlogn)
- 扔鸡蛋,在第N层及N层以上会摔破,N层以下不会破。求N
- (3)PHP生命周期和Zend引擎
- hdu 5411 CRB and Puzzle(矩阵快速幂)
- UI - UIImageView 和页面跳转
- windows中相对路径和绝对路径
- 1711: 上升序列 (动态规划)
- Catalan数
- UIlable让字体自适应宽度方法
- CSU 1335: 高桥和低桥(扫描线) 13年省赛题
- 0825Android基础ListView自定义Adapter优化
- HDU 4334 & BNU 126130 -- Trouble
- android 应用架构之MVC
- 自定义可点击 富文本组件
- ZOJ_1295解题报告