当前位置: 首页 > news >正文

每日两道算法题(第四天)(01背包,模拟+素数)

1.数位染色(01背包)

题目:

小红拿到了一个正整数 x 。她可以将其中一些数位染成红色。然后她想让所有染红的数位数字之和等于没染色的数位数字之和。
她不知道能不能达成目标。你能告诉她吗?

输入描述:

一个正整数 x ,1≤x≤1e18

输出描述:

如果小红能按要求完成染色,输出"Yes"。否则输出"No"

示例:

输入: 1234567 输出: Yes 说明: 将3、4、7染成红色即可,这样3+4+7=1+2+5+6

分析:

这道题的题目可以翻译成 在一个数组中能否找到一些数的和为总和的一半(每个数最多选择一次)。

由题意很容易想到是一个01背包的问题,接下来就是分析01背包的五步。

1.状态表示

dp[i][j]:从前i个数中选,能否挑选出一些数的总和为j。

2.状态转移方程

dp[i][j]有两种情况,第一种情况就是不选i位置的数dp[i][j]=dp[i-1][j](不选i位置的数,如果从前i-1个数中能凑成,那么从前i个数中就也能凑成),第二种情况就是选择i位置的数,此时dp[i][j]=dp[i-1][j-nums[i]](选i位置的数,如果从前i-1个数中能凑成要凑成的数(j)减去i位置选择的数,那么从前i个数种就也能凑成),两种情况有一种成立即可,所以dp[i][j]=dp[i-1][j]||dp[i-1][j-nums[i]],要注意的是j-nums[i]一定要大于等于0。

3.初始化

初始化就是多加一行多加一列,并要把dp[0][0]初始化为true(代表从前0个种凑总和为0,所以是true)。

4.填表顺序

从上往下,从左到右

5.返回值

dp[n][sum/2]

代码:

#include <iostream> #include<string> #include<vector> using namespace std; string s; int sum=0; int n=0; bool func() { //target必须是整数 if(sum%2==1) return false; int target=sum/2; vector<vector<bool>> dp(n+1,vector<bool>(target+1)); dp[0][0]=true; for(int i=1;i<=n;i++) { for(int j=0;j<=target;j++) { //没选i dp[i][j]=dp[i-1][j]; if(j>=s[i-1]-'0') dp[i][j]=dp[i][j]||dp[i-1][j-(s[i-1]-'0')]; } } return dp[n][target]; } int main() { cin>>s; n=s.size(); for(int i=0;i<n;i++) sum+=s[i]-'0'; if(func()) cout<<"Yes"<<endl; else cout<<"No"<<endl; }

2.素数回文(模拟+素数)

题目:

现在给出一个素数,这个素数满足两点:

1、 只由1-9组成,并且每个数只出现一次,如13,23,1289。

2、 位数从高到低为递减或递增,如2459,87631。

请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。

输入描述:

输入只有1行。

第1行输入一个整数t,保证t为素数。

数据保证:9<t<1e9

输出描述:

输出一行字符串,如果t的回文数仍是素数,则输出“prime”,否则输出"noprime"。

示例:

输入: 13 输出: prime 说明: 13的回文数是131,131是素数

分析:

这道题就是一个模拟+试除法判断素数的题。

首先根据题意获得t的回文数,具体代码实现过程就是,把t当作一个字符串来读取,然后从字符串的n-2位置遍历到0位置,把遍历到的数字追加到字符串的末尾,这样就能得到t的回文数了,再把字符串用stol转换成long long类型的数字就可以拿去判断是否是素数了。

注意:t的最大值是1e9,需要用long long来存回文,并且要用stol 不要用stoi。

代码:

#include <iostream> #include<string> #include<cmath> using namespace std; string s; bool isprime(long long num) { if(num<2) return false; for(long long i=2;i<=sqrt(num);i++) if(num%i==0) return false; return true; } int main() { cin>>s; string tmp; int n=s.size(); for(int i=n-2;i>=0;i--) { s+=s[i]; } long long num=stol(s); if(isprime(num)) cout<<"prime"<<endl; else cout<<"noprime"<<endl; }
http://www.jsqmd.com/news/635100/

相关文章:

  • 3步开启你的Web游戏模拟器:EmulatorJS完全指南
  • vLLM-v0.17.1详细步骤:NVIDIA/AMD/Intel多平台GPU算力适配指南
  • 告别环境依赖!用Auto-Py-To-Exe把YOLOv5项目打包成独立EXE(附避坑指南)
  • Linux入门--远程登录与用户管理
  • Win11Debloat终极指南:一键清理Windows 11预装垃圾,让你的系统重获新生
  • ViPER4Windows终极修复指南:简单三步解决Windows 10/11音频兼容性问题 [特殊字符]
  • 【国家级AI系统审计指南】:基于NIST AI RMF与OWASP Top 10 for LLMs的AIAgent双模日志审计框架
  • 从零上手谷歌Colab:免费GPU环境搭建与个人数据集加载实战
  • Graphite代码审查自动化实践
  • CHORD-X视觉战术指挥系统Python爬虫数据注入:开源情报自动收集与分析
  • 教育大模型落地难?SITS2026 AIAgent案例全链路复盘,从Prompt工程到教育伦理审查,12个关键决策点不容错过
  • 2026年贵州智慧停车与智能安防一站式解决方案深度横评|官方联系直达 - 精选优质企业推荐榜
  • 终极离线语音转文字指南:如何在本地电脑上安全转录音频文件
  • 一文读懂机器学习与深度学习的区别是什么
  • ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优郝
  • 2026奇点大会AIAgent推荐系统技术栈全景图,含3类不可替代中间件选型矩阵与2027兼容性预警
  • 优客工具箱:让音频格式转换变得触手可及
  • 二本计算机专业转AI Agent:简历怎么写才加分
  • 虚拟机ftp安装
  • 建筑热成像检测数据集 建筑物表面缺陷图像识别 建筑外墙保温缺陷检测、管道热损失识别 建筑物表面温度识别第10357期(代码+数据集+模型+界面)
  • 生成式 AI 知识创造 ROI 指标有哪些 如何量化效果?
  • HarmonyOS在语文教学中的应用-8. 古诗配乐朗读《静夜思》
  • LangChain4j+SpringBoot 实战:构建企业级智能知识库问答系统
  • Python中的函数及变量
  • 2026 金融科技公司数据 API 解决方案:MCP Agent
  • gte-base-zh快速上手:Xinference框架下的文本嵌入模型部署实战
  • 自我规范手册
  • 还在手动降重到凌晨?你的同学早就用这些神器轻松搞定了
  • OpenFace 2.2.0实战:4大核心功能深度解析与高效应用指南
  • 绿联NAS小白也能搞定:5分钟用Docker部署VoceChat私人聊天室(附常见问题排查)