首页 > 其他分享 >poj 1632 Vase collection

poj 1632 Vase collection

时间:2023-07-18 19:37:49浏览次数:36  
标签:1632 int collection 形状 cob poj 数组 ans comb


题意:有n个花瓶,每个花瓶都带有两种属性-形状和颜色,而每种属性都有36种不同的状态。求最大的k,使得k*k个花瓶的形状和颜色都有k种状态,且k*k个花瓶的两种属性都是由形状和颜色的k种状态组合而成的。


题解:我们用一个数组(comb[])存放形状和颜色,数组的下标为形状,然后将颜色状态压缩成为数组元素的值。这样一个数组元素就代表着,一个形状它对应了多少种颜色,而这个值也是这个形状对应的花瓶数。所以当与另一种形状的数组值,相与时,得到的结果如果大于等于2,那么也就代表着这两个形状至少有两种颜色是可以和他们任意匹配的,即找到了一个k=2,使得题目要求成立,而题目是求最大的k,所以我们记录当前算的k值为ans,两个数组值相与的值为cob,这样再与下一个形状的数组值相与,类似两个的计算,得到结果,更新ans即可。


#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int  MAX_  = 40;
typedef long long LL;

int ans;
LL comb[MAX_];

int censor(LL cob){
    int cnt = 0;
    for(; cob; cob>>=1){
        cnt += (cob&1);
    }
    return cnt;
}

void dfs(int k, int i, LL cob){
    if(k >= ans)ans = k;
    for(; i <= 36; i++){
        if(censor(cob & comb[i]) >= k+1){
            dfs(k+1,i+1,cob&comb[i]);
        }
    }
}

int main(){
    int Case, n, s,d;
    scanf("%d",&Case);
    while(Case--){
        scanf("%d",&n);
        ans = 0;
        memset(comb,0,sizeof(comb));
        for(int i = 0; i < n; i++){
            scanf("%d%d",&s,&d);
            comb[s] |= (1LL << d);
        }
        dfs(0,1,(1LL<<36) -1);
        printf("%d\n",ans);
    }
    return 0;
}




标签:1632,int,collection,形状,cob,poj,数组,ans,comb
From: https://blog.51cto.com/u_16192154/6767444

相关文章

  • poj 1777 Vivian's Problem
    题意:给出K个数,p1,p2,……pk,不一定是素数,给这些数添加指数,0-10之间,最终的乘积为n,他的所有因子和为m,问是否存在一个m为2的幂,如果有多个输出最大的指数,如果没有输出NO。梅森素数 我们把满足E=2^i-1的素数E称作梅森素数。关于梅森素数,有一个重要的定理:“一个数能够写成几个......
  • POJ 1410 Intersection
    判断线段与多边形是否相交。模板:#include<stdio.h>#include<math.h>#include<algorithm>usingnamespacestd;#definePi3.14159265358979#definePRECISION1e-8//点typedefstruct{doublex,y;}POINT;//直线两点的表达structLINE{POINTp1,p2;};......
  • java bean、EJB、POJO区别
    JavaBean、EJB、POJO区别在Java开发中,我们经常会听到三个词,JavaBean、EJB和POJO。它们在Java开发中有着不同的角色和用法。本文将详细介绍它们的区别,并给出相关的代码示例。JavaBeanJavaBean是一种Java语言规范,用于描述一种可重用的组件。它是一种特殊的类,遵循一些特定的命......
  • iOS tableView中嵌套collectionView如何动态计算高度
    tableview中嵌套collectionview的使用场景经常见,一般都是collectionview高度写死,那么如何在tableview高度自适应的情况下,collectionview的高度还能动态算准,可以通过以下方式,在cell中重写-(CGSize)systemLayoutSizeFittingSize:(CGSize)targetSizewithHorizontalFittingPriorit......
  • POJ3468 A Simple Problem with Integers
    ASimpleProblemwithIntegers题目链接:ASimpleProblemwithIntegers题意给定\(N\)个数,可以选择\([l,r]\),让下标在区间内的值都增加一定值,或者输出下标在区间内元素的和。思路可以用带懒标记的线段树写,但是代码太长,不利于编写。这里有一个利用差分借助树状数组实现的写法......
  • poj 1064 高精度 二分
    CablemasterTimeLimit: 1000MSMemoryLimit: 10000KTotalSubmissions: 32191Accepted: 6888DescriptionInhabitantsoftheWonderlandhavedecidedtoholdaregionalprogrammingcontest.TheJudgingCommitteehasvolunteeredandhaspromisedtoorganizethe......
  • poj 2236 Wireless Network 并查集
    WirelessNetworkTimeLimit: 10000MSMemoryLimit: 65536KTotalSubmissions: 20499Accepted: 8608DescriptionAnearthquaketakesplaceinSoutheastAsia.TheACM(AsiaCooperatedMedicalteam)havesetupawirelessnetworkwiththelapcomputers,butanun......
  • POJ 2109 Power of Cryptography 数学题 double和float精度和范围
    PowerofCryptographyTimeLimit:1000MSMemoryLimit:30000KTotalSubmissions:21354Accepted:10799DescriptionCurrentworkincryptographyinvolves(amongotherthings)largeprimenumbersandcomputingpowersofnumbersamongtheseprimes.Workint......
  • poj 1182 食物链 并查集
    食物链TimeLimit:1000MSMemoryLimit:10000KTotalSubmissions:56297Accepted:16500Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种......
  • Cesium学习笔记3——加载topojson和Geojson
    在根目录下新建bucket.css@import"../Build/CesiumUnminified/Widgets/widgets.css";@import"../Build/CesiumUnminified/Widgets/lighter.css";html{height:100%}body{background:#000;color:#eee;font-family:sans-serif;font-size:9pt;padding:0;margin:0;w......