当前位置: 首页 > news >正文

台州卓远做网站好不好培训机构加盟店排行榜

台州卓远做网站好不好,培训机构加盟店排行榜,可信赖的邢台做网站,福田祥菱v2双排后双轮报价题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。 小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…

题目描述

小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。

小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。

小蓝希望买到的瓜的重量的和恰好为 m 。

请问小蓝至少要劈多少个瓜才能买到重量恰好为 m 的瓜。如果无论怎样小蓝都无法得到总重恰好为 m 的瓜,请输出 −1 。

思路

朴素做法:

dfs每个瓜,有三种选择:

1.选瓜

2.劈瓜,选瓜

3.不选瓜

则复杂度为3^n,也就是3^30,大概2e14,绝对会超时。

所以需要剪枝优化

剪枝优化:

1.如果当前已有重量>所需重量,则剪枝

2.如果当前已有重量+剩下的重量总和<所需重量,剪枝,(求剩下的重量可以用后缀和数组优化)

3.如果当前已经劈过的次数>=目前的劈瓜的最小次数,剪枝

细枝末节:

还有一些细枝末节可优化:

1.除2的话可能会有小数,但是浮点数运算会慢很多,所以我们可以通过放大(乘2)原重量与所需重量。这样就可以只使用整型运算了。(也可以用两个数组分别存储放大后的重量与相应的减半的数量,这样可以在每次搜索时减少一次运算,不过应该影响不大)

2.将重量从大到小排序,这样可以提前排除许多剪枝。

3.强制类型转换的耗时也不少。(int转long之类的)(这一点是我没有想到的,也是我卡题的原因,经过不断不断一直一直反反复复的比对题解代码后才发现的。)

大家可以感受一下:

有转换的耗时,结果超时一半多

#include<bits/stdc++.h>
using namespace std;
int a[33];//原重
int b[33];//半重
long latter[33];
int m;
int n;
int ans=100;
void dfs(int u,int sum,int k){//sum为int类型时,long与int进行加减时会进行一次类型转换if(u==n||sum>=m||k>=ans||latter[u]+sum<m){if(sum==m)ans=min(ans,k);return ;}dfs(u+1,sum+a[u],k);dfs(u+1,sum+b[u],k+1);dfs(u+1,sum,k);
}
int main()
{cin>>n>>m;m*=2;for(int i=0;i<n;i++){cin>>b[i];a[i]=b[i]*2;}sort(a,a+n,greater<int>());sort(b,b+n,greater<int>());for(int i=n-1;i>=0;i--)latter[i]=latter[i+1]+a[i];dfs(0,0,0);if(ans!=100)cout<<ans;else cout<<-1;
}

没有类型转换的,成功通过,二者时间整整相差一倍

#include<bits/stdc++.h>
using namespace std;
int a[33];//原重
int b[33];//半重
long latter[33];
int m;
int n;
int ans=100;
void dfs(int u,long sum,int k){//sum为long类型时,没有类型转换的耗时if(u==n||sum>=m||k>=ans||latter[u]+sum<m){if(sum==m)ans=min(ans,k);return ;}dfs(u+1,sum+a[u],k);dfs(u+1,sum+b[u],k+1);dfs(u+1,sum,k);
}
int main()
{cin>>n>>m;m*=2;for(int i=0;i<n;i++){cin>>b[i];a[i]=b[i]*2;}sort(a,a+n,greater<int>());sort(b,b+n,greater<int>());for(int i=n-1;i>=0;i--)latter[i]=latter[i+1]+a[i];dfs(0,0,0);if(ans!=100)cout<<ans;else cout<<-1;
}

也不排除是测评机的原因,不过以后最好还是减少类似的类型转换更保险一些。

http://www.yidumall.com/news/7072.html

相关文章:

  • 建设电子商务网站所应用的技术图片优化是什么意思
  • 个人网站可以做哪些主题在百度怎么创建自己的网站
  • 求职网站网页设计百度百家号怎么赚钱
  • 网站开发工程师薪资域名备案查询官网
  • 网站seo快速排名营销策划推广
  • 武汉网站开发培训班百度帐号登录入口
  • 网站防火墙咋样建设北京百度推广优化公司
  • 网站关停公告怎么做湖南专业关键词优化
  • 中国优秀网页设计seo网络优化培训
  • 做网站 深圳百度认证有什么用
  • 怎么做独立app网站长沙网站优化价格
  • vc 做网站源码谷歌站长平台
  • 如何做网站稳定客户保定百度seo公司
  • vs做网站搜索引擎营销有哪些方式
  • 政府网网站一般谁做的网络推广自学
  • 榆林网站建设熊掌号广告的六种广告形式
  • 潍坊网站做的好的公司快速排名网站
  • 梅州市住房和建设局网站品牌宣传推广策划方案
  • 网站文件服务器搜索风云榜入口
  • 有关网站建设的文章广州seo推广
  • 2016网站备案域名备案官网
  • 单位做网站有哪些公司网页设计模板
  • 音乐网站开发文档撰写模板建站abc网站
  • 一个阿里云怎么做两个网站新闻源
  • 湖南美食网站建设策划书seo在线教学
  • 律师事务所网站模板今日热搜头条
  • 中端网站建设百度工具seo
  • 个人网站建设流程百度一下你就知道官网
  • 怎样才能制做免费网站搜索风云排行榜
  • 四川建设行业网站有哪些有什么好的网站吗