当前位置:网站首页>cf:C. Factorials and Powers of Two【dp + 排序 + 选不选板子 + 选若干个数等于已知和的最少数】
cf:C. Factorials and Powers of Two【dp + 排序 + 选不选板子 + 选若干个数等于已知和的最少数】
2022-07-07 15:41:00 【白速龙王的回眸】

分析
先把数组构造出来,用set存保证唯一
然后变成倒排的list
然后dfs,dfs记录当前和,剩余可选,选的个数
如果当前和为n成功
剪枝:剩余可选为0,当前和大于n,当前和+剩余可选和小于n
然后返回的是选或不选当前第一个的最小值dfs
ac code
import sys
import functools
input = sys.stdin.readline
for _ in range(int(input())):
n = int(input())
s = set()
cnt = 1
now = 1
while cnt <= n:
s.add(cnt)
now += 1
cnt *= now
cnt = 1
while cnt <= n:
s.add(cnt)
cnt *= 2
lst = tuple(sorted(list(s), reverse = True))
def dfs(tempSum, tempLst, cnt):
# success
if tempSum == n:
return cnt
# fail 1
if len(tempLst) == 0 or tempSum > n:
return 0x7f7f7f7f
# cut branch, fail 2
if tempSum + sum(tempLst) < n:
return 0x7f7f7f7f
return min(dfs(tempSum + tempLst[0], tempLst[1:], cnt + 1), dfs(tempSum, tempLst[1:], cnt))
ans = dfs(0, lst, 0)
if ans < 0x7f7f7f7f:
print(ans)
else:
print(-1)
总结
选不选板子
边栏推荐
猜你喜欢
随机推荐
Enum + Validation 的个人最佳实践 demo 分享
数字化转型的主要工作
【网络攻防原理与技术】第4章:网络扫描技术
到底有多二(Lua)
Establishment of solid development environment
alertDialog創建对话框
Several best practices for managing VDI
目标检测1——YOLO数据标注以及xml转为txt文件脚本实战
手机版像素小鸟游js戏代码
Notification is the notification displayed in the status bar of the phone
Alertdialog create dialog
麒麟信安操作系统衍生产品解决方案 | 存储多路径管理系统,有效提高数据传输可靠性
使用OneDNS完美解决办公网络优化问题
viewflipper的功能和用法
Please insert the disk into "U disk (H)" & unable to access the disk structure is damaged and cannot be read
<代码随想录二刷>链表
无法链接远程redis服务器(解决办法百分百)
鲲鹏开发者峰会2022 | 麒麟信安携手鲲鹏共筑计算产业新生态
第3章业务功能开发(用户访问项目)
DatePickerDialog and trimepickerdialog

![[tpm2.0 principle and Application guide] Chapter 1-3](/img/28/7f6e848d5c12d175214d6cc5de7c8b.png)







