qidao123.com技术社区-IT企服评测·应用市场

标题: 蓝桥杯“子2023“十四届真题C++题解 [打印本页]

作者: 张春    时间: 2025-4-18 00:46
标题: 蓝桥杯“子2023“十四届真题C++题解

以下是我的解题方案

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4.     long long dp[4]={0};
  5.     for(int i=1;i<=2023;++i){
  6.         string num = to_string(i);
  7.         for(char c:num){
  8.             if(c=='2'){
  9.                 dp[2]+=dp[1];
  10.                 dp[0]+=1;
  11.             }else if(c=='0'){
  12.                 dp[1]+=dp[0];
  13.             }else if(c=='3'){
  14.                 dp[3]+=dp[2];
  15.             }
  16.         }
  17.     }
  18.     cout<<dp[3]<<endl;
  19.     return 0;
  20. }
复制代码
初始化动态规划数组:
  1. long long dp[4] = {0};
复制代码

遍历所有数字:
  1. for(int i=1; i<=2023; ++i){
  2.     string num = to_string(i);
  3.     ...
  4. }
复制代码

逐字符更新动态规划状态:
  1. for(char c : num){
  2.     if(c=='2'){
  3.         dp[2] += dp[1]; // "20" 扩展为 "202"
  4.         dp[0] += 1;     // 新的以 "2" 结尾的子序列
  5.     }else if(c=='0'){
  6.         dp[1] += dp[0]; // "2" 扩展为 "20"
  7.     }else if(c=='3'){
  8.         dp[3] += dp[2]; // "202" 扩展为 "2023"
  9.     }
  10. }
复制代码
遍历当前数字字符串的每个字符:

输出效果:
  1. cout << dp[3] << endl;
复制代码
终极,dp[3] 存储的就是以 '2023' 为子序列的个数。

核心逻辑分析




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4