当前位置: 首页 > news >正文

【51Nod】1920 空间统计学 状压DP

【题目】1920 空间统计学
【题意】给定m维空间中的n个点坐标,满足每一维坐标大小都在[0,3]之间,现在对于[0,3*m]的每个数字x统计曼哈顿距离为x的有序点对数。\(n \leq 2*10^5,m \leq 9\)
【算法】状压DP
m范围很小,考虑设计状压DP的状态,可以想到设到达某个坐标j(将m维坐标压成m位四进制数)步数为k(距离等价于步数)的点数,但是难以转移。考虑按维转移,考虑每一维往外走的情况来转移。
\(f_{i,j,k}\)表示前i维,到达坐标j,步数为k的点数。转移时枚举第i+1维的坐标l,假设坐标j的第i+1维是x,那么:

\[f(i+1,j+(l-x)*4^i,k+|x-l|)+=f(i,j,k)\]

最后统计答案的时候,对于每个点坐标j将f[m][j][~]累加进答案即可。
复杂度\(O(m*4^m*3m*4)\)
注意:1.时限比较紧,要用读入优化,枚举步数上限3*i等优化常数。2.空间比较紧,要用滚动数组(好像可以不用?)。

#include<cstdio>
#include<cstring>
#include<algorithm>
bool isdigit(char c){return c>='0'&&c<='9';}
int read(){
    int s=0,t=1;char c;
    while(!isdigit(c=getchar()))if(c=='-')t=-1;
    do{s=s*10+c-'0';}while(isdigit(c=getchar()));
    return s*t;
}
using namespace std;
const int maxn=270010;
int abs(int x){return x>=0?x:-x;}
int n,m,f[2][maxn][30],b[10],t[maxn];
int main(){
    n=read();m=read();
    b[0]=1;for(int i=1;i<=m;i++)b[i]=b[i-1]*4;
    for(int i=1;i<=n;i++){
        int num=0;
        for(int j=1;j<=m;j++)num=num*4+read();
        f[0][num][0]++;//
        t[i]=num;
    }
    int o=0;
    for(int i=0;i<m;i++){//from 0
        o=1-o;
        for(int j=0;j<b[m];j++)for(int k=0;k<=3*(i-1);k++)f[o][j][k]=0;
        for(int j=0;j<b[m];j++){
            int x=j/b[i]%4;
            for(int k=0;k<=3*i;k++)if(f[1-o][j][k])
                for(int l=0;l<=3;l++)f[o][j+(l-x)*b[i]][k+abs(x-l)]+=f[1-o][j][k];
        }
    }
    for(int k=0;k<=3*m;k++){
        long long ans=0;
        for(int j=1;j<=n;j++)ans+=f[o][t[j]][k];
        printf("%lld ",ans);
    }
    return 0;
}

转载于:https://www.cnblogs.com/onioncyc/p/9084867.html

相关文章:

  • vue-router原理剖析
  • js继承方式讲解
  • BZOJ5286:[HNOI/AHOI2018]转盘——题解
  • maven 下载地址
  • JS中的深拷贝与浅拷贝了解一下
  • Postfix邮件系统
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • MSSQL最佳实践:如何监控备份还原进度?
  • 项目依赖和生成顺序造成的问题
  • MySQL修改root密码的方法
  • 多线程事务回滚
  • 5.30 Tree Traversal + Tree manipulation
  • 网页视频加速播放
  • 阿里云新一代关系型数据库 PolarDB 剖析
  • 函数模板(四十七)
  • [deviceone开发]-do_Webview的基本示例
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android Studio:GIT提交项目到远程仓库
  • Angular2开发踩坑系列-生产环境编译
  • Median of Two Sorted Arrays
  • Spring Cloud中负载均衡器概览
  • SQLServer之创建数据库快照
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 对JS继承的一点思考
  • 排序算法之--选择排序
  • 前端_面试
  • 深度学习中的信息论知识详解
  • 译米田引理
  • 仓管云——企业云erp功能有哪些?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Java NIO(一)FileChannel
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #pragma pack(1)
  • #pragma预处理命令
  • $ git push -u origin master 推送到远程库出错
  • (HAL库版)freeRTOS移植STMF103
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十一)图像的罗伯特梯度锐化
  • (五)IO流之ByteArrayInput/OutputStream
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net反编译的九款神器
  • .NET学习教程二——.net基础定义+VS常用设置