腾讯编程按钮那道题,用动态规划不知道哪里出问题了,求指点

作者:不吐槽不舒服斯基啊
链接:https://www.nowcoder.com/discuss/40991?type=0&order=0&pos=12&page=1 来源:牛客网
#include <iostream>
using namespace std;
void find_equal(int num1,int num2,int n,int total1,int total2,int &min_num){
if(num1==total1&&num2==total2){
if(n<min_num)
min_num=n;
return;
}
if(num1>total1)
return;
n=n+1;
find_equal(num1*2,num2*2,n,total1,total2,min_num);
find_equal(num1+1,num2*2,n,total1,total2,min_num);
}
int main() {
int a,b,A,B;
while(cin >> a >> b>>A>>B){
int min_num=100000;
find_equal(a,b,0,A,B,min_num);
if(min_num!=100000)
cout<<min_num<<endl;
else
cout<<"-1"<<endl;
}
}
我是想着用迭代去找,但不知道为什么min_num总是没变化==#腾讯#
全部评论
ma+n=A,pb+q=B,当时打算求出其中的m,n,p,q,然后。。然后就没有然后……
点赞 回复 分享
发布于 2017-09-13 22:17
按钮题 要想尽量次数少,肯定多用乘法,假设用乘法的次数为N 假如乘法的操作序列m(1) m(2)....m(N) 加法操作序列为n(1),n(2),n(3).....n(N) 综合操作序列为m(1) , n(1) , m(2) , n(2) , .... ,m(N) ,  n(N) 2^[m(1)+m(2)+...+m(N)]a + 2^[m(2)+...+m(N)]*n(1) + 2^[m(3)+...+m(N)]*n(2) +... + 2^[m(N)]*n(N-1) + n(N) = A 我是尽量用乘法,先把最大的乘法次数N求出来得到2^N,然后然后p = N; 然后: 2^[m(2)+...+m(N)]*n(1) + 2^[m(3)+...+m(N)]*n(2) +... + 2^[m(N)]*n(N-1) + n(N) = A - 2^[m(1)+m(2)+...+m(N)]a = restA 然后求加法的次数,加法次数想尽量小,那么越早加越好,加入在第i次乘法后加K(0<=i<=N),使2^i的系数K尽量大,设factor = 2^[m(2)+...+m(N)] restA = A - 2^[m(1)+m(2)+...+m(N)]a; restB = B - 2^[m(1)+m(2)+...+m(N)]b; while(restA != 0){ while(factor > restA){     factor /= 2;  } p+=restA/factor; restA%=factor; restB%=factor; } 最后判断restB是否等于0,不等于0则p=-1 我怕两个不符合,用同样的方法对B求一遍得到另一个p2 如果两个p都是大于等于0,则求最小值 如果一个大于等于0,一个小于0,则取大于等于0的值, 否则取这两个p的最小值非负值 不知道对不对
点赞 回复 分享
发布于 2017-09-13 18:21
为啥我没有算法题?投的是算法啊……
点赞 回复 分享
发布于 2017-09-13 17:53
因为你第二个find_XXX写错了, 所以一直无法满足条件, 所以就不会改变. PS: ***这明明是深搜, 装成动归骗人啊!
点赞 回复 分享
发布于 2017-09-13 17:24
你这是爆搜吧,第二个dfs写错了应该是+1你写成*2
点赞 回复 分享
发布于 2017-09-13 17:22

相关推荐

2025-12-06 01:10
已编辑
哈尔滨工程大学 Java
一面问的真细,二面不知为啥变双机位。9.29快手主站平时怎么学习&nbsp;AI&nbsp;的,国内外知名大模型,实习公司都用的什么大模型,怎么评估效果的java池化思想,线程池构造方法的核心参数,线程池中阻塞队列注意事项,submit方法参数和执行逻辑,shutdown和shutdownnow,核心线程允许过期吗threadlocal底层,为什么key是弱引用,key回收了再get或者set这个value会怎样aqs,如何保证公平性java代理java堆划分,新生代还有别的晋升老年代的情况吗,什么时候触发gc,gc失败抛什么异常,如何排查oom,导出dump命令redis数据结构,哪个底层是跳表,和其他数据结构对比布隆过滤器会出现大key问题吗,你咋实现的布隆过滤器你怎么实现redis分布式锁,可重入,续期聚簇索引非聚簇索引select语句会加锁吗,怎么实现的不加锁undolog&nbsp;redolog&nbsp;binlog怎么能让select加锁,update这个范围加的什么锁,update一条呢手撕简单01背包,接雨水10.10快手主站意图识别用的哪个大模型,走到意图和rag的比例,faq是点击的吗自然语言怎么识别的gap一年干啥了,转正怎么样没跟组里提意向吗,研究生研究方向是传统算法吗,会大模型微调吗注册场景为什么用布隆过滤器,原理分布式锁底层的key怎么拼的,value里是什么redis持久化zset底层mysql索引结构,一个表三个字段有主键唯一索引和没索引的字段会有几个b+树,聚簇索引非聚簇索引存的啥无手撕
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务