hdu5798
官方题解:
考虑去掉abs符号,发现只有相邻两个数的最高位被影响了才会影响abs的符号,所以可以按照最高位不一样的位置分类,之后考虑朴素枚举x从0到2^20,每次的复杂度是O(400),无法通过,考虑优化,第一种方法是用DFS来进行枚举,第二种则是加入记忆化
用dfs枚举简单一点
#include<bits/stdc++.h> using namespace std;
typedef long long ll;
int d[],n,mx,ansx;
ll anss,c[][];
void dfs(int i,int x,ll s)
{
if (s>anss) return;
if (i>mx)
{
if (s<anss||(s==anss&&x<ansx))
{
anss=s;
ansx=x;
}
return;
}
for (d[i]=; d[i]<=; d[i]++)
{
ll ns=s+c[i][i];
for (int j=; j<i; j++)
if (d[i]^d[j]) ns-=c[i][j];
else ns+=c[i][j];
dfs(i+,x+d[i]*(<<i),ns);
}
} int work(int a,int b,int h)
{
if (a<b) swap(a,b);
for (int i=h; i>=; i--)
c[h][i]+=((a>>i&)-(b>>i&))<<i;
} int main()
{
int cas;
scanf("%d",&cas);
while (cas--)
{
scanf("%d",&n);
int a,b;
scanf("%d",&a);
memset(c,,sizeof(c));
mx=;
for (int i=; i<n; i++)
{
scanf("%d",&b);
int h=;
while (h>=&&!((a>>h&)^(b>>h&))) h--;
work(a,b,h);
a=b;
}
while (mx>=&&!c[mx][mx]) mx--;
anss=1e18; ansx=;
dfs(,,);
printf("%d %lld\n",ansx,anss);
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int d[],n,mx,ansx;
ll anss,c[][];
void dfs(int i,int x,ll s)
{
if (s>anss) return;
if (i>mx)
{
if (s<anss||(s==anss&&x<ansx))
{
anss=s;
ansx=x;
}
return;
}
for (d[i]=; d[i]<=; d[i]++)
{
ll ns=s+c[i][i];
for (int j=; j<i; j++)
if (d[i]^d[j]) ns-=c[i][j];
else ns+=c[i][j];
dfs(i+,x+d[i]*(<<i),ns);
}
} int work(int a,int b,int h)
{
if (a<b) swap(a,b);
for (int i=h; i>=; i--)
c[h][i]+=((a>>i&)-(b>>i&))<<i;
} int main()
{
int cas;
scanf("%d",&cas);
while (cas--)
{
scanf("%d",&n);
int a,b;
scanf("%d",&a);
memset(c,,sizeof(c));
mx=;
for (int i=; i<n; i++)
{
scanf("%d",&b);
int h=;
while (h>=&&!((a>>h&)^(b>>h&))) h--;
work(a,b,h);
a=b;
}
while (mx>=&&!c[mx][mx]) mx--;
anss=1e18; ansx=;
dfs(,,);
printf("%d %lld\n",ansx,anss);
}
}
hdu5798的更多相关文章
- hdu5798 Stabilization
温习一下多校的题目 这题主要抓住一点,亦或值的贡献是固定的 所以按位搜索即可 #include<bits/stdc++.h> using namespace std; typedef lo ...
随机推荐
- Spring中@Resource与@Autowired、@Qualifier的用法与区别(转)
1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必 ...
- Efficient Deblurring for Shaken and Partially Saturated Images
Try the online demo: http://willow-fd.rocq.inria.fr/unshake/ Overview One common feature of “shaken” ...
- 使用snmp4j实现Snmp功能(一)
相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) 上一篇文章讲了Snmp的一些基本概念(Snmp学习笔记), ...
- HDU1542 扫描线+离散化
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- ubuntu18.04server设置静态IP
16.04以后的版本配置静态IP是类似这样的文件 /etc/netplan/50-cloud-init.yaml 1.查询网卡名称 2.修改配置文件/etc/netplan/50-cloud-init ...
- Update SSM agent to each EC2 via Bat and bash script
1. copy the instance id from aws console to file 2. remove the , from file sed -i 's/,//g' file 3. g ...
- 解决华为手机用rem单位,内容超出屏幕宽度问题
在H5手机页面上,用rem单位布局,配合js计算出一个根节点的font-size(原理是屏幕宽度乘以一个固定比例,如1/100),之后页面中所有的px全都换算成了rem单位来写,优点是能适配各种不同屏 ...
- mixin模式特点
mixin模式特点: 1.单一功能, 2.不和基类关联,可以和任意基类组合,基类可以不和mixin关联就可以初始化成功 3.不使用 super() 用法
- 适配器模式 C#
适配器模式 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. ● Target目标角色:该角色定义把其他类转换为何种接口,也就是我们的期望接 ...
- IntentServicce;Looper;long-running task
7. If you want to carry on a long-running task, what do you need to do? IntentService:Service Servic ...