思路:

先把能选的路线都预处理出来

按照能停的车的多少排个序 (剪枝1)

搜搜搜

如果当前剩的车÷当前能停车的多少+deep>=ans剪掉 (剪枝2)

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,vis[60],xx,cnt,ans=17;
struct Route{int start,gap,all;}route[1005];
bool check(int start,int gap){
for(int i=start;i<60;i+=gap)
if(!vis[i])return 0;
return 1;
}
bool cmp(Route a,Route b){return a.all>b.all;}
void dfs(int x,int deep,int remain){
if(remain/route[x].all+deep>=ans)return;
if(!remain){ans=min(ans,deep);return;}
for(int i=x;i<=cnt;i++){
if(check(route[i].start,route[i].gap)){
for(int j=route[i].start;j<60;j+=route[i].gap)
vis[j]--;
dfs(i,deep+1,remain-route[i].all);
for(int j=route[i].start;j<60;j+=route[i].gap)
vis[j]++;
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&xx),vis[xx]++;
for(int i=0;i<30;i++)
for(int j=i+1;i+j<60;j++)
if(check(i,j)){
route[++cnt].gap=j,route[cnt].start=i;
for(int k=route[cnt].start;k<60;k+=route[cnt].gap)route[cnt].all++;
}
sort(route+1,route+1+cnt,cmp);
dfs(1,0,n);
printf("%d\n",ans);
}

最新文章

  1. Javascript下拉导航
  2. insertAfter的兼容性
  3. R绘图基础
  4. 【团队项目演示】FZU5BOYS之团队项目链接汇总
  5. [Js]面向对象基础
  6. what is docker
  7. C#一个简单下载程序实例(可用于更新)
  8. 山东理工大学ACM平台题答案关于C语言 1543 Egypt
  9. 换行符以及for循环的优化
  10. XML文档的PHP程序查询代码
  11. 【转载】jQuery全屏滚动插件fullPage.js
  12. 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)
  13. 114. Flatten Binary Tree to Linked List(M)
  14. hibernate重要知识点总结
  15. 重新入坑-IntelliJ Maven
  16. 42 前端HTML
  17. input文字垂直居中和按钮对齐问题,兼容IE8
  18. 1854. [SCOI2010]游戏【二分图】
  19. linux时区问题
  20. Dijkstra+优先队列 堆优化

热门文章

  1. VMware exsi 虚拟化嵌套
  2. 紫书 习题8-9 UVa 1613 (dfs染色+图的性质)
  3. [luogu]P4312 [COCI 2009] OTOCI / 极地旅行社(LCT)
  4. Generator 简介
  5. ztree实现根节点右击事件,显示添加删除
  6. HDU 4366 Successor
  7. _stat函数/struct stat 结构体使用笔记
  8. Linux平台不同解压缩命令的使用方法
  9. AI目前的根本问题——缺乏 自由意志,无法分辨真正的善恶
  10. spring boot 的常用注解使用 总结