CF538B Quasi Binary

Quasi Binary

https://ac.nowcoder.com/acm/problem/110925

  • 前言

    大菜鸡早上做题,误视作贪心,QwQ

  • 分析

    这就是一个背包问题。因为 n<=1e6 ,可以dfs枚举出所有只含0和1的数。然后,就是一个完全背包。只是在转移的时候记录一下从哪个地方转移过来的,然后回溯就能找到答案。

  • 代码

#include<bits/stdc++.h>

using namespace std;

const int N=2e5+10;

int n,tot;
int ans[N],dp[N],pre[N];

inline void Get(int now)
{
    if(now>n) return ;
    ans[++tot]=now;
    Get(now*10+1);
    Get(now*10);
}

inline void dfs(int now)
{
    if(!now) return ;
    dfs(pre[now]);
    printf("%d ",now-pre[now]);
}

int main()
{
    scanf("%d",&n);
    Get(1);

    sort(ans+1,ans+tot+1);
    tot=unique(ans+1,ans+tot+1)-ans-1;

    memset(dp,0x3f,sizeof(dp));dp[0]=0;
    for (int i=1;i<=tot;i++)
        for (int j=ans[i];j<=n;j++)
            if(dp[j-ans[i]]+1<dp[j])
            {
                dp[j]=dp[j-ans[i]]+1;
                pre[j]=j-ans[i];
            }

    printf("%d\n",dp[n]);dfs(n);

    return 0;
}
每日一题 文章被收录于专栏

每天的题,为了牛币

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:19
点赞 评论 收藏
分享
专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
评论
2
1
分享
牛客网
牛客企业服务