CF837D Round Subset
LX.CF837D Round Subset
思路:
设表示:
前位,选出个,这个物品能否拥有个和个(bool
型)
接下来开始削减位数。
第一维可以直接背包掉。现在只剩三维。
因为这是bool
,我们就可以想办法把它压成int
。
于是设表示:选择个物品,拥有个时,最多能拥有多少个。
则答案为。
复杂度为,可以通过。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,f[210][13000],lim,res;
pair<int,int>p[210];
pair<int,int>read(){
long long x;
scanf("%I64d",&x);
pair<int,int>ret=make_pair(0,0);
while(!(x%5))x/=5,ret.first++;
while(!(x&1))x>>=1,ret.second++;
return ret;
}
int main(){
scanf("%d%d",&n,&m),memset(f,-1,sizeof(f));
for(int i=1;i<=n;i++)p[i]=read(),lim+=p[i].first;
f[0][0]=0;
for(int i=1;i<=n;i++)for(int j=min(i,m);j;j--)for(int k=lim;k>=p[i].first;k--)if(f[j-1][k-p[i].first]!=-1)f[j][k]=max(f[j][k],f[j-1][k-p[i].first]+p[i].second);
for(int i=1;i<=lim;i++)res=max(res,min(i,f[m][i]));
printf("%d\n",res);
return 0;
}
分类:
DP
, DP——背包/树上背包
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?