abc288g
通过这道题复习一下sosdp。
sosdp用于求解子集和。
我们设\(f[i][s]\)表示后\(i\)位是\(s\)的子集,前\(n-i\)位等于\(s\)的\(a\)中的数的和
在从\(f[i][s]\)转移到\(f[i+1]\)时,需要分2种情况讨论。
1.当\(s\)的第\(i+1\)位是\(1\),\(f[i+1][s]=f[i][s]+f[i][s xor 2^i]\)
2.当\(s\)的第\(i+1\)位是\(1\),\(f[i+1][s]=f[i][s]\)
这道题事实上可以类似sosdp,然后把这个过程反着做。
#include<bits/stdc++.h>
using namespace std;
int n,a[1000000],pw[1000],f[1000000][15];
int main(){
pw[0]=1;
for(int i=1;i<14;i++)
pw[i]=pw[i-1]*3;
scanf("%d",&n);
for(int i=0;i<pw[n];i++)
scanf("%d",&a[i]);
for(int i=0;i<pw[n];i++)
f[i][0]=a[i];
for(int i=0;i<n;i++)
for(int j=0;j<pw[n];j++){
int wz=(j/pw[i])%3;
int pz=wz*pw[i];
int p1=f[j-pz][i],p2=f[j-pz+pw[i]][i],p3=f[j-pz+pw[i]*2][i];
if(wz==0)
f[j][i+1]=p2-p3;
else if(wz==1)
f[j][i+1]=p3+p1-p2;
else
f[j][i+1]=p2-p1;
}
for(int i=0;i<pw[n];i++)
printf("%d ",f[i][n]);
}
abc288g的更多相关文章
随机推荐
- 使用vault配置加密
简介 在使用ansible的过程中,不可避免的会存储一些敏感信息,比如在变量文件中存储帐号密码信息等. ansible通过ansible-vault命令行工具来提供对敏感文件的加密和解密. ansib ...
- 禅道服务崩溃 Can't init tc log
0.环境 禅道 版本12.4.3 数据库 10.1.22-MariaDB SQL 服务器 192.168.0.82 centos 7 step 1.问题 磁盘爆满后,禅道在启动时报数据库 Can' ...
- 2.13python基础知识
编程语言的发展史 1.机器语言:内部用0和1表示 2.汇编语言:简单的字母表示二进制 3.高级语言:人类可以理解的 1.执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 2. ...
- foreach的异步(async,await)的问题及其处理方式
开发中遇见个难题很苦恼,好在我解决了,只要能解决我就很开心 本篇文章从forEach方法 到promise 到async await统统理解个遍,进入正题 先看下面代码会出现什么问题: const a ...
- CentOS 7.9 环境下构建 Python 3.9
sudo yum -y update sudo yum -y install yum-utils sudo yum-builddep -y python3 curl -O https://www.py ...
- C#开发上位机常用
从深圳回内地几年了,突然想把之前项目中用到的东西做信合集,别忘记了!!!
- 【三维重建】Ubuntu20.04进行RealSenseD435环境配置及初步使用
一.环境配置 github上面的教程:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux ...
- 【驱动 】frambuffer中显示屏参数的修改
1.在x210板子的kernel中,默认LCD显示屏是800*400的,修改在 kernel/arch/arm/mach-s5pv210/mach-x210.c 中 258行 #define S5PV ...
- kubernetes弃用dockershim
转载自:https://www.51cto.com/article/710688.html 前段时间,kubernetes推出了1.24版本,曾经轰动一时的docker弃用也正式实装了,这意味着1.2 ...
- 查看linux 用户
sudo cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1}' ...