校赛热身 Problem C. Sometimes Naive (状压dp)

- 题解:
- 列举每一种3的倍数的组合,开始先求出3条边的可行解,则
- 六条边的可行解可以由两个三条边得来。
- 详见代码解析
#include<bits/stdc++.h>
using namespace std;
int a[],n,cnt,ant,is[],dp[];
struct node
{
int num,id;
}angle[];
bool cmp(const node& a,const node& b)
{
return a.num<b.num;
}
int abs1(int x)
{
if(x<)return -x;
return x;
}
void init()
{
for(int i=;i<(<<n);i++)
{
int ans=,t=i;
while(t)
{
if(t&)ans++; //这一位是1节++
t=t>>; //右移
}
if(ans%==)
{
angle[cnt].id=i;
angle[cnt++].num=ans/;
}
if(ans==)
{
int v[],ans1=,ans2=,t=i;
while(t)
{ //把二进制位是1的边对应上
if(t&)v[ans1++]=a[ans2];
t=t>>;
ans2++;
}
if(abs1(v[]-v[])<v[]&&abs1(v[]-v[])<v[]&&abs1(v[]-v[])<v[])
{ //两边只差小于第三边,和会超int
is[ant++]=i;
dp[i]=;
}
}
}
}
int main()
{
int T,cas=;scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d",&a[i]);
cnt=,ant=;
memset(dp,,sizeof(dp));
dp[]=;
init();
sort(angle,angle+cnt,cmp);//要排序
for(int i=;i<cnt;i++)
{
node e=angle[i];
for(int j=;j<ant;j++)
{
//&位运算
if(dp[e.id]&&!(e.id&is[j]))//若e.id已存在并且
//.e.id中的边与is[j]中没有重边则dp[e.id|is[j]]=1
dp[e.id|is[j]]=;//推到下一个
}
}
for(int i=cnt-;i>=;i--)
{
if(dp[angle[i].id]) //答案要最多,从后往前遍历
{
printf("Case #%d: %d\n",++cas,angle[i].num);
break;
}
}
}
return ;
}
校赛热身 Problem C. Sometimes Naive (状压dp)的更多相关文章
- Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...
- Problem Arrangement ZOJ - 3777(状压dp + 期望)
ZOJ - 3777 就是一个入门状压dp期望 dp[i][j] 当前状态为i,分数为j时的情况数然后看代码 有注释 #include <iostream> #include <cs ...
- 校赛热身 Problem B. Matrix Fast Power
找循环节,肯定在40项以内,不会证明. #include <iostream> #include <cstring> #include <string> #incl ...
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...
- lightoj 1119 - Pimp My Ride(状压dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1119 题解:状压dp存一下车有没有被搞过的状态就行. #include < ...
- ZOJ 3777 - Problem Arrangement - [状压DP][第11届浙江省赛B题]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds Me ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- 多校7 HDU5816 Hearthstone 状压DP+全排列
多校7 HDU5816 Hearthstone 状压DP+全排列 题意:boss的PH为p,n张A牌,m张B牌.抽取一张牌,能胜利的概率是多少? 如果抽到的是A牌,当剩余牌的数目不少于2张,再从剩余牌 ...
- nyoj1273 河南省第九届省赛_"宣传墙"、状压DP+矩阵幂加速
宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...
随机推荐
- poj 2828 Buy Tickets 【买票插队找位置 输出最后的位置序列+线段树】
题目地址:http://poj.org/problem?id=2828 Sample Input 4 0 77 1 51 1 33 2 69 4 0 20523 1 19243 1 3890 0 31 ...
- 剑指Offer——圆圈中最后剩下的数(约瑟夫环)
Question 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后, ...
- mysql基础(4)-数据导入
如何把数据导入(出)mysql 导出 sql语句 select * from 表名 into outfile "详细路径" fields terminated by ...
- HDFS数据复本存放
复本怎么放Hadoop的默认布局策略是在运行客户端的节点上放第一个复本(如果客户端运行在容器之外,就随机选择一个节点,不过系统会避免挑选那些存储太满或太忙的节点).第二个复本放在与第一个不通且随机另外 ...
- Apache Phoenix的子查询
Phoenix现在支持在WHERE 和FROM 中使用子查询.子查询可以被指定在很多地方,比如 IN/NOT IN, EXISTS/NOTEXISTS等. Subqueries with INor N ...
- IOS 发布被拒 PLA 1.2问题 整个过程介绍 01
公司前端时间发布IOS APP ,但是遇到一些很麻烦的问题,就是一个让人摸不着头脑的问题. 问题: The Seller and Artist names associated with your a ...
- skynet中的各种锁
最近读skynet c语言部分的源码,发现有好多锁的使用和gcc提供的一些原子操作.看到这些东西,对于我这个newbee来说实在有些hold不住.但为了了解并进一步掌握,还是决定好好分析一下.不足之处 ...
- Git---之上传远程仓库
一:在GitHub上注册账号 官网 : https://github.com/ 二:与远程仓库关联 在本地生成ssh key 运行命令 ssh-keygen -t rsa -C "50 ...
- [转载]JDBC读写Oracle的CLOB、BLOB
JDBC读写Oracle10g的CLOB.BLOB http://lavasoft.blog.51cto.com/62575/321882/ 在Oracle中存取BLOB对象实现文件的上传和下载 ht ...
- 《ActiveMQ in Action》例子
本章内容: 介绍本书中所有例子的使用场景 使用 Maven 编译.运行例子 例子中怎么使用 ActiveMQ 简介 ActiveMQ 不仅实现了 JMS 规范中定义的所有特性,也额外提供了一些特有且有 ...