bzoj 1786 && bzoj 1831: [Ahoi2008]Pair 配对(DP)
来源:互联网 发布:报名系统源码 编辑:程序博客网 时间:2024/05/22 15:34
1786: [Ahoi2008]Pair 配对
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 899 Solved: 591
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
5 4
4 2 -1 -1 3
Sample Output
4
一个很好的结论是:
填入的数一定要不严格递增,因为如果填入的数中存在逆序对,那么交换这两个数一定会使答案更优
这样就可以dp了
步骤:
①预处理sum[i][x]为第i个数如果为x那么包含x的逆序对为sum[i][x]个
②dp[i][x]表示第i个数填上x最少有dp[i][x]个逆序对
上面两个数组都可以O(nk)处理出来所有情况
复杂度O(nk)
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[10005], s1[10005][105], s2[10005][105], dp[10005][105];int main(void){int n, k, i, j, last, ans, now;scanf("%d%d", &n, &k);for(i=1;i<=n;i++)scanf("%d", &a[i]);for(i=1;i<=k;i++){for(j=1;j<=n;j++){s1[j][i] = s1[j-1][i];if(a[j]>i)s1[j][i] += 1;}for(j=n;j>=1;j--){s2[j][i] = s2[j+1][i];if(a[j]<i && a[j]!=-1)s2[j][i] += 1;}for(j=1;j<=n;j++)s1[j][i] += s2[j][i];}ans = last = 0;memset(dp, 62, sizeof(dp));for(i=1;i<=n;i++){if(a[i]!=-1){ans += s1[i][a[i]];continue;}now = 2e9;for(j=1;j<=k;j++){if(last==0)dp[i][j] = s1[i][j];else{now = min(now, dp[last][j]);dp[i][j] = now+s1[i][j];}}last = i;}now = 2e9;for(i=1;i<=k;i++)now = min(now, dp[last][i]);if(last==0)printf("%d\n", ans/2);elseprintf("%d\n", ans/2+now);return 0;}/*5 44 2 -1 4 3*/
阅读全文
1 0
- bzoj 1786 && bzoj 1831: [Ahoi2008]Pair 配对(DP)
- 【bzoj 1786】[Ahoi2008]Pair 配对
- bzoj 1786 [Ahoi2008]Pair 配对
- BZOJ 1786: [Ahoi2008]Pair 配对 题解
- BZOJ 1786 配对Pair
- (bzoj 1831: [AHOI2008]逆序对)<DP>
- bzoj1786&1831[Ahoi2008]Pair 配对
- BZOJ1786: [Ahoi2008]Pair 配对
- bzoj1786: [Ahoi2008]Pair 配对
- bzoj 1831: [AHOI2008]逆序对
- bzoj 1237: [SCOI2008]配对 (贪心+DP)
- bzoj 1237: [SCOI2008]配对(DP)
- 【bzoj 1237】[SCOI2008]配对 dp
- bzoj 1787 [Ahoi2008]Meet 紧急集合(1832 [AHOI2008]聚会)
- BZOJ P1832[AHOI2008]聚会
- BZOJ [Ahoi2008]Meet 紧急集合
- BZOJ 1832: [AHOI2008]聚会|Lca
- bzoj 1832: [AHOI2008]聚会 lca
- ubuntu系统 网络socket通信和本地sock通信(抽象命名方式和普通命名方式)
- 图书管理系统数据库设计
- python tempfile
- swing入门和布局管理
- Idea + Hadoop2.7.4开发Mapreduce
- bzoj 1786 && bzoj 1831: [Ahoi2008]Pair 配对(DP)
- 很不错的 app 更新
- 字符串的模拟
- 2017年11月总结
- jQuery bind() 方法使用详解
- 面向对象-(子父类中函数的特点-覆盖)
- 手游定制房卡棋牌农场为什么成为小型投资的理想产品
- Oracle,MySQL,SQL Server三种数据库用法差异
- tf.assign()