栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3306 Kill the Monsters

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3306 Kill the Monsters

#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int N = 20 ;bool map[N][N] ;char s[N+1] ;int num[1<<N] ;int a[N] , n , sta[N];int p[N+1] ;int main(){ num[0] = 0 ; for (int i = 1 ; i < (1<<20) ; i++) { int t=0,x=i; while (x){ t+=(x&1); x>>=1; } num[i] = t ; } while (scanf("%d",&n)==1 && n){ for (int i = 0 ; i < N ; i++) { scanf("%s",s); for (int j = 0 ; j < N ; j++) map[i][j] = (s[j] == '#') ; } for (int j = 0 ; j < N ; j++){ int mask = 0 ; for (int i = 0 ; i < N ; i++){ mask = (mask<<1 | map[i][j]) ; } sta[j] = mask ; } int ans = 0 ; for (int i = 1 ; i < (1<<20) ; i++){ if (num[i]>=n || n-num[i]>N) continue ; for (int j = 0 ; j <= N ; j++) p[j]=0 ; for (int j = 0 ; j < N ; j++){ int mask = sta[j] & i ; p[num[mask]]++ ; } int tmp=0 , last=n-num[i]; for (int j = 20 ; j >= 1 ; j--){ if (last>=p[j] && p[j]) { tmp += p[j]*j; last -= p[j] ; }else if (last<=p[j]){ tmp += j*last; break ; } } ans=max(ans,tmp) ; } printf("%dn",ans); } return 0 ;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374033.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号