• 【Codeforces】CF 165 E Compatible Numbers(状压dp)


    题目

    传送门:QWQ

    分析

    很难想到方向,但有方向了就很easy了。

    我们如何减少不必要的计算?

    如果我们知道了$ 100111 $的相容的数,$ 100101 $的相容数和他是完全一样的。

    我们就靠着这个思想写一下就行了。

    注意位运算优先级。

    代码

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1<<22, INF=(1<<22)-1;
     4 
     5 int dp[maxn], a[maxn];
     6 
     7 int main(){
     8     int n;
     9     scanf("%d", &n);
    10     for(int i=1; i<=n; i++)
    11         scanf("%d", &a[i]);
    12 
    13     memset(dp,-1,sizeof(dp));
    14     for(int i=1;i<=n;i++){
    15         dp[INF&(~a[i])]=a[i];
    16     //    printf("%d %d
    ", INF&(~a[i]),a[i]);
    17     }
    18     for(int i=INF; i>=1; i--) {
    19         if(dp[i]>0) continue;
    20         for(int j=0;j<22;j++) {
    21             if(!(i &(1<<j)) && dp[i|(1<<j)]>0) {
    22                 dp[i]=dp[i|(1<<j)];    //printf("----  %d %d   %d %d
    ",i,j,a[i] &(1<<j),dp[a[i]&(1<<j)]);
    23                 break; 
    24             }
    25         }
    26     }
    27     for(int i=1;i<=n;i++) 
    28         printf("%d ",dp[a[i]]);
    29     return 0;
    30 }
  • 相关阅读:
    git 常用命令
    centos 7 mini 安装
    python打印杨辉三角
    python 求100内的素数/质数
    字符串与bytes
    format
    Python字符串格式化
    数据结构
    ARM工作模式
    C语言实现字符串逆序输出
  • 原文地址:https://www.cnblogs.com/noblex/p/9527335.html
Copyright © 2020-2023  润新知