Bigger is Better UVA - 12105 dp

UVA12105 - Bigger is Better(DP) 题目链接: UVA12105  【题意】用不超过n(n   【分析】可以用dp[i][j]表示除以m余j的i位数最少需要多少火柴这个状态计算,转移方程是:用dp[i][j]+c[k]来更新dp[i+1][(j*10+k)%m](c[]是每个数字需要花费的火柴数量,k是当前枚举的数字)。可以避免高精度提高效率,但是怎么确定每一位上的数字都是什么呢,需要用dp[i][0]找到最大的i使得dp 阅读详情

用两个数组 一个dp[i][j]表示用i根火柴 余数为j的数字最大位数 而p[i][j]记录一下这个位数中的最右边的那个数字是什么

#include<cstdio>
#include<cstring>

using namespace std;

const int maxn = 100 + 5;
const int maxm = 3000 + 5;

// dp[i][j] is the maximal length of the integer whose remainder is j (with at most i matches)
// dp[i][j]表示用i个火柴能拍成余数为j的整数的最大长度
// p[i][j] is the maximal digit for state (i,j)
// p[i][j]表示状态i j可使用的最大数字
int n, m, dp[maxn][maxm], p[maxn][maxm];

int needs[] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
//需要的火柴数
int main(){
  int kase = 0;
  while(scanf("%d%d", &n, &m) == 2) {
    printf("Case %d: ", ++kase);

    for(int i = 0; i <= n; i++)
      for(int j = 0; j < m; j++){
        int& ans = dp[i][j];
        ans = p[i][j] = -1;
        if (j == 0) ans = 0;
        for(int d = 9; d >= 0; d--)//从大到小枚举
          if (i >= needs[d]){
            int t = dp[i - needs[d]][(j * 10 + d) % m];
            if (t >= 0 && t + 1 > ans){//如果加上这个数的位数大于答案的位置 更新ans 然后记录一下d
              ans = t + 1;
              p[i][j] = d;
            }
          }
      }

    if (p[n][0] < 0) printf("-1");
    else {
      int i = n, j = 0;
      for(int d = p[i][j]; d >= 0; d = p[i][j]){
        printf("%d", d);//i表示火柴数 j表示最大余数
        i -= needs[d];
        j = (j * 10 + d) % m;
      }
    }
    printf("\n");
  }
  return 0;
}

 

IEEE Transactions on Industrial Informatics(TII) 投稿须知- Initial Submission 请注意,您可以在作者中心查看稿件的当前状态,如:在EIC办公室、分配给AE、AE邀请审稿人、AE指定审稿人、正在审稿、等待AE决定、等待EIC决定。为了确保公正的评审过程,我们要求在稿件中没有任何作者的身份(不包括作者的姓名、传记、隶属关系、求职信、签署的版权表格、识别脚注、致谢等)。如果你的手稿有很大一部分已经在会议上发表过,论文必须隐藏所有作者的身份,这样会议论文就可以被引用,就好像它是由不同的作者写的一样。请注意,通常你的技术成就是根据被引用的次数来评估的,而不是根据发表的论文数量。 阅读详情

相关推荐

深入解析XTEA加密算法的核心机制与优化策略

本文深入解析XTEA加密算法的核心机制与优化策略,详细介绍了XTEA在嵌入式系统和资源受限环境中的优势,包括其高效的加解密速度和低资源消耗。文章还探讨了XTEA的轮函数设计、关键参数优化策略以及实战应用中的性能对比,为开发者提供了安全增强方案和优化技巧。

k8l9m0n的博客 242

uva12105 - Bigger is Better 大数

Bob has n matches. He wants to compose numbers using the following scheme (that is, digit 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 needs 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 matches): Fig 1 Digits from matches Write

1074

第十一届全国大学生GIS应用技能大赛——广西区域发展布局示意图

我们需要制作一幅广西区域发展布局示意图,最终成图参考“数据”文件夹中的广西区域发展布局示意图.png。地图使用的投影坐标系是 Asia_North_Albers_Equal_Area_Conic,其中地理坐标系是China_Geodetic_Coordinate_System_2000,中央经线东经 105°,标准纬线是北纬 25°和北纬 47°,出图比例尺 1:4,780,000。

@HNUSTer的博客 7794

uva 12105 - Bigger is Better(dp)

题目链接:uva 12105 - Bigger is Better 题目大意:有n根火柴,要组成一个数字能够整除m,并且最大。 解题思路:dp[i][j]表示用了i个火柴,组成的数字模掉m余j的情况,只不过状态保留的是字符串。 #include #include #include #include using namespace std; const int

不慌不忙、不急不躁 1940

SeetaFace6人脸活体检测C++代码实现Demo

活体检测是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法。 人脸识别系统存在被伪造攻击的风险。因此需要在人脸识别系统中加入活体检测,验证用户是否为真实活体本人操作,以防止照片、视频、以及三维模型的入侵,从而帮助用户甄别欺诈行为,保障用户的利益。

mickey2007的博客 3468

CentOS7下快速修复libssl.so.1.1缺失问题(附腾讯云镜像加速下载)

本文详细介绍了在CentOS7系统中快速修复libssl.so.1.1缺失问题的工程化实践方案。通过编译安装OpenSSL 1.1.x版本、配置动态链接器及创建符号链接等步骤,有效解决共享对象文件缺失问题,并提供了腾讯云镜像加速下载的优化方案,帮助开发者高效部署现代应用。

weixin_33711647的博客 367

uva 12105 Bigger is Better

dp[cost][x]表示用了cost根火柴,取模后余x的最大数 import java.math.BigInteger; import java.util.Scanner; public class Main { static int n,mod; static int a[]={ 6,2,5,5,4,5,6,3,7,6 }; static BigIn

便纵有千种风情 583

【深度学习新浪潮】Qwen门控注意力斩获NeurIPS 2025最佳论文!技术解析与代码实现

Qwen团队的门控注意力机制获得NeurIPS 2025最佳论文,不仅是中国AI研究的重大突破,更是大模型架构创新的重要里程碑。这项研究证明,通过巧妙的架构设计,可以在不显著增加计算成本的前提下,大幅提升模型性能。正如论文所展示的,用一个极其简单的改动,同时解决了Transformer架构中的多个核心问题,这正是优秀研究的价值所在。该技术已成功应用于Qwen3大模型,为通义千问系列产品的性能提升提供了坚实的技术支撑。轻量化大模型设计多模态统一架构专用领域大模型优化边缘计算场景部署。

专注:太空算力、AI infra、异构调度、大模型成本工程 569

UVA 12105 Bigger is Better(数位DP)

题意: 分析: 方法一:很容易想到,dp[i][j]代表用了i根火柴,除m余j的最大数。用刷表法,每次选择一个数k放在最右边,用dp[i][j]×10+k去更新dp[i+needs[k]][ ( j×10+k) % m], 其中needs[i]:i 所需要的火柴个数。不过因为有100个火柴,会涉及到大数。计算量挺大。 方法二:不好想。定义状态(i,j)表示用不超过i根火柴拼出“除以m余数为j”的...

常胜将军的博客 327

光谱数据预处理综合

除了化学信息,光谱还包含其他不相关或不需要的信息,如电噪声,基质背景,杂散光,散射效应等。在用化学计量学方法建立校准模型时,利用预处理方法消除光谱数据中的无关信息和噪声是非常必要的。

qq_44204759的博客 5189

JS逆向-7881游戏平台Lb-Sign参数和Lb-Timestamp参数

本文是该专栏的第79篇,后面会持续分享python爬虫干货知识。本文以7881游戏平台为例,通过JS逆向获取它的lb-sign参数和lb-timestamp参数生成规律。针对lb-sign和lb-timestamp两个参数具体的“逆向”思路逻辑,笔者将在本文进行详细说明,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,跟着笔者直接往下看正文部分。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 1220

【UVa】【DP】12105 Bigger is Better

UVa 12105 Bigger is Better 题目 ◇题目传送门◆(由于UVa较慢,这里提供一份vjudge的链接) ◇题目传送门(vjudge)◆ 题目大意 使用不超过NNN根的火柴摆出一个尽量大的、能够被MMM整除的正整数。数字的摆放方法如下图所示: 思路 一道极其明显的数位DP。。。 相信大家都看了紫书的两种做法(但是我根本没有看懂)。但是我在这里将给出一个极...

IDDFS 260

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

UVA - 12105 Bigger is Better(DP)

传送门 首先,此类问题——模某个数的动态规划,一般都是从其他余数转移而来 然后本题用到了一个比较重要的大数求余的性质,也就是说大数可以一位一位得操作从而达到取余的目的,可以参考这里 方法一 状态转移 设d(i,j)d(i,j)d(i,j)表示用iii根火柴能拼出的除以mmm余数为jjj的最大数,使用字符串string表示大数。因为状态的转移是互相独立的,那么考虑刷表法,设d(i,j)d(i,j)d(i,j)拼上当前个位数kkk后为curcurcur,由当前状态更新未知状态: d(i+c(k),(j∗10+

Happig的博客 225

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

UVA - 12105 Bigger is Better(dp)

题意:给出n个火柴,要求用这些火柴组成

绝望的乐园 917

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

UVA - 12105 Bigger is Better DP

题目链接 题意很简单哦,就是用n根火柴拼出能被m整除的最大的数。这题一直困扰了我很久。。。本来是按照书上给的方法,dp[i][j]表示除以m余j的i位数需要的火柴数,刚开始想用记忆化搜索写,然而,在选择数字的时候出了问题,不知道该选大的还是该选火柴少的,恩 一定是功力不够,然后一直拖着好久,今天终于看到了老先生说的‘更简单的做法’,就是用dp[i][j]存储被m除余j的数的最大长度,i为火柴数,

cout<<"Hello World!"; 585

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UVA 12105 Bigger is Better——dp

做法为紫书P294的优化做法,前导0卡了一年,最后直接特判过了,所以代码比较挫 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; const int maxn = 3010; const int IN...

hao_zong_yin的博客 354

Bigger is Better - UVa 12105 dp

Bob has n matches. He wants to compose numbers using the following scheme (that is, digit 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 needs 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 matches): Fig 1 Digits from matches Wr

提比的强行AC 581

UVA - 12105 Bigger is Better ( DP )

题意: 给出n个木棒,摆出能被m整除的最大的数 分析: 有一种非常显而易见的dp方法:  f[i][j]表示用i根火柴拼出的“%m是j”的最大整数  转移方程: f[i+c[k]][(j*10+k)%m]=max{f[i][j]+k} 时间复杂度是O(10*nm),看上去好像非常优秀  但是这样的状态值是高精度(能拼成的数可能很大),因此实际计算量非常大  (再说有人愿意随手写一个高精度吗...

兜率工的博客 270

UVA 12105 Bigger is Better(数位DP)

Bob has n matches. He wants to compose numbers using the following scheme (that is, digit 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 needs 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 matches): Write a program to make a non-

JOY 酷酷的专栏 580

UVA 12105 Bigger is Better(数位dp)

f[i][j]表示用i根棍子余数为j可以组成的最大数。 但是最长可能有55位,所以用字符串来保存这个数,所以定义f[i][j][k]; 每次先枚举火柴棍的根数,再枚举余数,最后枚举最新加进去的数字,每次把火柴棍为i时,余数为0的最大组成数字记下来即可。#include #include #include #include using namespace std; char f[105][300

qq_33901573的博客 292

UVA 12105 - Bigger is Better(DP+高精度)

题目链接:12105 - Bigger is Better 题意:一些火柴,问你能组成整除m最大的数字是多少。 思路:dp[i][j]表示用i根火柴,组成%m余数为j的最大数字,末尾多一个数字k的状态就是dp[i + num[k]][(j * 10 + k) % m],由于最多可能50位数,所以要用高精度。 注意一个优化点,由于高精度的计算上只需要乘10+k,常规的高精度乘法复杂度还是有点高

Remilia's 1609

Bigger is Better UVA - 12105(dp+大数)

题目连接:点击打开链接 题目思路:传说中这道题有3种做法,难想程度与实现难度成反比,我用了最容易想到的那种方法,dp[i][j]代表为用了i根火柴,余数为j的最大的数,这个还是容易想到一点, 然后用刷表法更新状态,用大数实现一下,注意特判一下初始0的情况。 ac代码; #include #include #include #include #include #include #includ

w571523631的博客 328

UVA - 12105 Bigger is Better (数位dp思路+前导零的判断)

首先,要说明的是本体的解体思路诚如刘汝佳所说有两种; 第一种 , 定义d(i,j)为i根火柴拼出的模m余数为j的最大数,来更新d(i + c(k),(j*10+k)%m );(为什么不递推而使用更新刷表法,因为尝试从i,j直接转移到其子状态,j的模不好计算) 这种算法状态数和转移次数都不错,但必须使用大数,会超时; 第二种,使用d(i,j)表示i位数模m为j最少需要多少火柴(特别注意状态转移

playwfun的专栏 593

UVA12105 Bigger is Better 详解

UVA12105 Bigger is Better 题目描述:紫书P293 用不超过 n(1≤n≤100)n(1 \leq n \leq 100)n(1≤n≤100) 根火柴摆出一个尽量大的、能被 m(1≤m≤3000)m(1 \leq m \leq 3000)m(1≤m≤3000) 整除的数。 解题思路 方法一: 来自紫书,设dp(i,j)dp(i,j)dp(i,j)表示用iii根火柴能拼出除以mmm余数为jjj的最大的数,枚举在对右边添加数字kkk,用dp(i,j)∗10+kdp(i,j)*10+kd

weixin_39412108的博客 383

UVa 12105 Bigger is Better

该问题要求使用给定数量的火柴棍构造最大的m的倍数。采用动态规划预处理结合贪心构造的方法:首先用DP计算不同位数和余数所需最小火柴数,然后从高位到低位贪心选择最大数字,确保剩余火柴能满足条件。关键点在于位数优先和余数处理,通过预处理10的幂次模m来优化计算。时间复杂度为O(n×m×10),适用于n≤100和m≤3000的情况。若无解则输出-1。

寂静山林 879
上一篇: Fixing the Great Wall UVA - 1336 区间dp+前缀和+记忆化
下一篇: Disgruntled Judge UVA - 12169 拓展欧几里得 +暴力
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值