bzoj1786: [Ahoi2008]Pair 配对
来源:互联网 发布:绝对伏特加 知乎 编辑:程序博客网 时间:2024/05/22 07:50
传送门
首先要YY出一个性质:在-1处天的数单调不减。
很显然,大的数放前面,小的数放后面逆序对增多。
然后f[i][j]表示前i个-1,第i个-1上填的数字是j的最优解。
转移自己YY以下九可以了。
#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cstdlib>#define ll long longusing namespace std;int a[10005],b[10005],big[10005][105],sma[10005][105],g[105],f[105];int n,l,mi,ans,tot;int main(){ scanf("%d%d",&n,&l); for (int i=1;i<=n;i++){ scanf("%d",&a[i]); if (a[i]==-1) b[++tot]=i; } for (int i=2;i<=n;i++){ memcpy(big[i],big[i-1],sizeof(big[i-1])); if (a[i-1]!=-1) for (int j=1;j<a[i-1];j++) big[i][j]++; } for (int i=n-1;i>=1;i--){ memcpy(sma[i],sma[i+1],sizeof(sma[i+1])); if (a[i+1]!=-1) for (int j=a[i+1]+1;j<=l;j++) sma[i][j]++; } for (int i=1;i<=n;i++) if (a[i]!=-1) ans+=sma[i][a[i]]; for (int i=1;i<=l;i++) g[i]=big[b[1]][i]+sma[b[1]][i]; for (int i=2;i<=tot;i++){ for (int j=2;j<=l;j++) g[j]=min(g[j],g[j-1]); for (int j=1;j<=l;j++) f[j]=g[j]+big[b[i]][j]+sma[b[i]][j]; memcpy(g,f,sizeof(f)); } mi=g[1]; for (int i=2;i<=l;i++) mi=min(mi,g[i]); printf("%d",ans+mi);}
阅读全文
0 0
- BZOJ1786: [Ahoi2008]Pair 配对
- bzoj1786: [Ahoi2008]Pair 配对
- bzoj1786&1831[Ahoi2008]Pair 配对
- 【bzoj 1786】[Ahoi2008]Pair 配对
- bzoj 1786 [Ahoi2008]Pair 配对
- BZOJ 1786: [Ahoi2008]Pair 配对 题解
- bzoj 1786 && bzoj 1831: [Ahoi2008]Pair 配对(DP)
- [BZOJ1786&&BZOJ1831]配对 dp
- bzoj1786
- BZOJ 1786 配对Pair
- nrf51822 --- 配对绑定输入密码(pair)
- pair
- pair
- Pair
- Pair
- pair
- 配对
- 配对
- 整除7,9,11的数的性质
- java语言---一维数组要点
- VR系列——Oculus Rift 开发者指南:四、高级渲染配置(二)
- 微信公众号开始运营了
- 599Minimum Index Sum of Two Lists
- bzoj1786: [Ahoi2008]Pair 配对
- FUNDAMENTAL Unit02 变量 、 JAVA基本类型
- CMS收集器和G1收集器优缺点
- python request快速上手
- 11-JavaScript设计模式——享元模式
- mysql常用操作小节
- CentOS7下手动配本地yum源
- C#添加属性快捷键、类和对象
- ubutun 安装php7.1x