博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva1377 ruler
阅读量:6481 次
发布时间:2019-06-23

本文共 1833 字,大约阅读时间需要 6 分钟。

 

给你一系列的长度。你要制作一个有m个刻度的尺子,使得任意一个长度都能以某两个刻度之间的距离表示

要求m尽量小的前提下尺子长度尽量小。你可以认为刻度数不超过7

首先要想明白的一点,尺子长度就为这n个长度中的最大值。以这个值为长度的尺子一定能满足m尽量小。

然后我们如何去搜索呢?我们的刻度是任意的,但可以跟给定长度建立关系。我们枚举一个当前还不能表示的长度,然后枚举这个长度是由哪个已有刻度和新刻度共同产生的。这样的做法是显然能得到解的。还有一个重要问题,如何判重呢?我们只要判断当前状态能表示哪些刻度就有了——即表示的给定长度都相同的两种状态视为同一种状态。其中的原因可以这么想。因为枚举刻度的时候我们确定了左端点和右端点,即0和尺子的最大刻度。

然后这样对广搜判重的时候就有两种情况

1.当前得到的状态消耗刻度数比相同状态的所用刻度数多

这种情况不必多说,说明当前的刻度划分方式是不明智的一种,显然应该舍弃之。

2.当前得到的状态消耗刻度数和相同状态的所有刻度数一样多

因为左右端点确定,若他们表示的状态都相同,要么这两个尺子相同,要么这二者之间就类似是对称的。即在搜索中是可以类似进行操作的

来的渣比我讨论吧。。。参考别人才写的

#include
#include
#include
#include
#include
using namespace std;const int maxm=58;const int maxn=1000008;int a[maxm];int b[maxm];int idx;set
ans;int shit[maxn];bool vis[maxn<<5];struct fuck{ int state; set
ans;}f;void bfs(){ queue
q; f.ans.clear();f.ans.insert(0);f.state=0; q.push(f); int i; while(!q.empty()) { f=q.front();q.pop(); // printf("%d\n",f.state); if(f.state==(1<
f.ans.size()) ans=f.ans; /* else { if(*ans.rbegin()>*f.ans.rbegin()) ans=f.ans; }*/ } } if(f.ans.size()==7) continue; for(i=0;i
::iterator it =f.ans.begin(); it!=f.ans.end();it++) { // printf("%dbitch\n",*it); if(*it>b[i]) { fuck p=f; int sum=*it-b[i]; for(set
:: iterator it2=f.ans.begin(); it2!=f.ans.end();it2++) { int nu=abs(*it2-sum); // printf("bitch%d\n",nu); if(shit[nu]==-1) continue; p.state=(p.state|(1<
:: iterator it2=f.ans.begin(); it2!=f.ans.end();it2++) { int nu=abs(*it2-sum); if(shit[nu]==-1) continue; p.state=(p.state|(1<
::iterator it; bool flag=false; printf("Case %d:\n",cas++); printf("%d\n",ans.size()); for(it=ans.begin();it!=ans.end();it++) { if(flag) printf(" "); printf("%d",*it); flag=true; } printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/bitch1319453/p/5011452.html

你可能感兴趣的文章
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
Security updates and resources
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>
打印图片
查看>>
SHOW CREATE DATABASE Syntax
查看>>
rsync常见问题及解决办法
查看>>
MySQL日期 专题
查看>>
C#中禁止程序多开
查看>>
分布式缓存Redis使用以及原理
查看>>
Activity竟然有两个onCreate方法,可别用错了
查看>>
Linux经常使用命令(十六) - whereis
查看>>
Linux五种IO模型
查看>>