BZOJ 1786 配对Pair
来源:互联网 发布:折800是淘宝官方活动吗 编辑:程序博客网 时间:2024/05/18 03:33
注意到-1的位置所填的数一定是不下降的,而且k的值非常的小,所以考虑DP。
设dp[i][j]表示在前i个-1的位置上,第i个-1的位置上填数字j所产生的最少逆序对数目,那么求出来之后只需要加上开始时的逆序对数即可。
需要预处理出来两个数组,big[i][j]和small[i][j]分别表示,在第i个数前面并且比数字j大的数字的个数,在第i个数后面并且比j小的数字的个数,这样的话
dp[i][j]=min{dp[i][j],dp[i-1][1~j]+big[p[i]][j]+small[p[i]][j]}
p表示的是第i个-1所在数列中的位置。
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int inf=1061109567;int a[10005],pos[10005];int small[10005][105],big[10005][105],dp[10005][105];int main(){ int n,k,cnt=0; memset(big,0,sizeof(big)); memset(small,0,sizeof(small)); memset(dp,63,sizeof(dp)); int ans=inf; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]==-1) pos[++cnt]=i; } for(int i=2;i<=n;i++) { for(int j=1;j<=k;j++) { big[i][j]=big[i-1][j]; if(a[i-1]>j) big[i][j]++; } } for(int i=n-1;i>=1;i--) { for(int j=1;j<=k;j++) { small[i][j]=small[i+1][j]; if(a[i+1]<j && a[i+1]!=-1) small[i][j]++; } } int num=0; for(int i=1;i<=n;i++) num+=big[i][a[i]]; for(int i=1;i<=k;i++) dp[1][i]=big[pos[1]][i]+small[pos[1]][i]; for(int i=2;i<=cnt;i++) for(int j=1;j<=k;j++) for(int p=1;p<=j;p++) dp[i][j]=min(dp[i][j],dp[i-1][p]+big[pos[i]][j]+small[pos[i]][j]); for(int i=1;i<=k;i++) ans=min(ans,dp[cnt][i]); ans=(ans==inf)?0:ans; printf("%d",ans+num); return 0;}
- BZOJ 1786 配对Pair
- 【bzoj 1786】[Ahoi2008]Pair 配对
- bzoj 1786 [Ahoi2008]Pair 配对
- BZOJ 1786: [Ahoi2008]Pair 配对 题解
- bzoj 1786 && bzoj 1831: [Ahoi2008]Pair 配对(DP)
- BZOJ1786: [Ahoi2008]Pair 配对
- bzoj1786: [Ahoi2008]Pair 配对
- bzoj1786&1831[Ahoi2008]Pair 配对
- BZOJ 1237 配对
- BZOJ 1237: [SCOI2008]配对
- bzoj 1237 [SCOI2008]配对
- nrf51822 --- 配对绑定输入密码(pair)
- 【bzoj 1237】[SCOI2008]配对 dp
- BZOJ 4514 [Sdoi2016]数字配对
- 【BZOJ】4514: [Sdoi2016]数字配对
- BZOJ 4205: 卡牌配对
- bzoj 4236: JOIOJI(map+pair)
- bzoj 4514: [Sdoi2016]数字配对 费用流
- Spring 的事务管理学习笔记
- clj的treap
- 真正有本事的人不是控制阶段能力强,而是让风险根本不会发生
- Android平台下Live555移植
- LBS与GPS
- BZOJ 1786 配对Pair
- HDU1599:find the mincost route(Floyd)
- vs2012的一个bug
- LOCAL_SHARED_LIBRARIES 与 LOCAL_LDLIBS,LOCAL_LDFLAGS的区别
- CvvImage在高级别的Opencv2.4.7下的配置以及错误解决办法。
- Ubuntu 13.04 安装 VMware Tools,解决无法找到kernel header path的问题
- rpm 命令|rpm 安装|rpm 卸载|rpm 使用|rpm 删除
- 贝叶斯网络简介
- GeekOS 中的文件系统