打卡第二十八天

1.数列

问题描述

给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:

1,3,4,9,10,12,13,...

(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,...)

请你求出这个序列的第N项的值(用10进制数表示)。

例如,对于k=3,N=100,正确答案应该是981。

输入说明

只有1行,为2个正整数,用一个空格隔开:k N

(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)。

输出说明

计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*109)。(整数前不要有空格和其他符号)。

个人总结

求这个序列的第 N 项,实际上就是把十进制的数字 N 转换成二进制,然后把这个二进制的 01 串当作 k 进制数,再算回十进制的值。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main(){
	int k,n;
	cin>>k>>n;
	//将n转换为二进制
	vector<int> num;
	int result=0;
	while(n>0){
		num.push_back(n%2);
		n/=2;
	}
	for(int i=num.size()-1;i>=0;i--){
		result+=num[i]*pow(k,i);
	}
	cout<<result<<endl;
	return 0;
}

2.质数的乘积

问题描述

Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7......这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000......个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。

输入说明

仅包含一个正整数n,其中n<=100000。

输出说明

输出一行,即前n个质数的乘积模50000的值。

个人总结

multiply的类型要设为long long,否则可能会溢出

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

bool isPrime(int n){
	if(n==2) return true;
	else if(n<2) return false;
	else if(n%2==0) return false;
	else{
		for(int i=3;i<=sqrt(n);i+=2){
			if(n%i==0) return false;
		}
	}
	return true;
}

int main(){
	int n;//前n个质数的乘积
	cin>>n;
	long long multiply=1;
	int num=2;
	while(n--){ //前n个质数
		while(num>=2){
			if(isPrime(num)){
				multiply=((multiply%50000)*(num%50000))%50000;
				num++;
				break;
			}
			num++;
		}
	}
	cout<<multiply<<endl;
	return 0;
}

3.天天向上

问题描述

A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花。"可是这对于A同学太困难了。于是,老师对他放宽了要求:"只要你有4天成绩是递增的,我就奖励你一朵小红花。"即只要对于第i、j、k、l四天,满足i<j<k<l并且对于成绩wi<wj<wk<wl,那么就可以得到一朵小红花的奖励。现让你求出,A同学可以得到多少朵小红花。

输入说明

第一行一个整数n,表示总共有n天。第二行n个数,表示每天的成绩wi。

n<=1000,0<=wi<=109。

输出说明

一个整数,表示总共可以得到多少朵小红花。

个人总结

1.dp[i][len]:以第 i天的成绩结尾时,长度为 len 的递增序列一共有多少个

初始化: 对于任意第 i 天,它自己单独可以算作一个长度为 1 的序列,所以 dp[i][1] = 1

2.状态转移(接龙): 在看第 i 天的成绩时,回头看看它前面所有的天数(假设是第 j 天)。

  • 如果 w[j] < w[i](前面的成绩比今天差,符合递增):

    • 那么第 j 天长度为 1 的序列,加上今天,就变成了长度为 2 的序列。

    • 第 j 天长度为 2 的序列,加上今天,就变成了长度为 3 的序列。

    • 第 j 天长度为 3 的序列,加上今天,就变成了长度为 4 的序列。

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n;
    if (!(cin >> n)) return 0;
    vector<int> w(n);
    for (int i = 0; i < n; i++) {
        cin >> w[i];
    }
    // dp[i][len] 表示以第 i 个数结尾,长度为 len 的递增子序列的个数
    // len 从 1 到 4,为了下标直观,我们第二维大小设为 5 (即下标 0~4)
    vector<vector<long long>> dp(n, vector<long long>(5, 0));
    
    long long total_flowers = 0;

    // 遍历每一天,将其作为序列的结尾
    for (int i = 0; i < n; i++) {
        dp[i][1] = 1; // 自己本身构成一个长度为 1 的序列

        // 往前找可以"接龙"的数字
        for (int j = 0; j < i; j++) {
            if (w[j] < w[i]) {
                // 如果能接上,就把前面的组合数累加到当前的长度上
                dp[i][2] += dp[j][1];
                dp[i][3] += dp[j][2];
                dp[i][4] += dp[j][3];
            }
        }
        
        // 累加所有以第 i 天结尾,且长度正好为 4 的序列数量
        total_flowers += dp[i][4];
    }

    // 输出总红花数
    cout << total_flowers << "\n";

    return 0;
}

英语翻译

复制代码
Reinforcement learning is a powerful approach for solving sequential decision-making problems. In this framework, an agent interacts with an environment by taking actions and receiving rewards. The goal is to learn an optimal policy that maximizes cumulative rewards over time. Unlike supervised learning, reinforcement learning relies on trial-and-error rather than labeled data. Techniques such as Q-learning and policy gradient methods are widely used to train agents. With the integration of deep neural networks, deep reinforcement learning has achieved remarkable success in complex tasks such as game playing, robotic control, and autonomous systems. However, challenges such as sample inefficiency and unstable training remain key issues that researchers are actively addressing.

强化学习是解决序贯决策问题的一种有效方法。在该框架中,智能体通过采取行动与环境交互并获得奖励,其目标是学习一种最优策略,从而最大化长期累积奖励。与监督学习不同,强化学习依赖试错探索而非标注数据。Q学习、策略梯度法等技术被广泛用于训练智能体。结合深度神经网络后,深度强化学习在游戏博弈、机器人控制、自主系统等复杂任务中取得了显著成果。不过,样本利用率低、训练过程不稳定等问题仍是研究人员正在积极攻克的核心难题。

相关推荐
小此方2 小时前
算法实战论01(双指针篇一):双指针的核心思想与应用场景总结
c++·算法·力扣
2401_878530212 小时前
C++与FPGA协同设计
开发语言·c++·算法
2301_814590252 小时前
C++中的装饰器模式实战
开发语言·c++·算法
weixin_649555672 小时前
C语言程序设计第四版(何钦铭、颜晖)第十一章指针进阶之查找星期
数据结构·算法
北顾笙9802 小时前
day10-数据结构力扣
数据结构
2301_804215412 小时前
模板元编程应用场景
开发语言·c++·算法
实心儿儿2 小时前
C++ —— 红黑树
java·开发语言·算法
炘爚2 小时前
C++(普通指针和成员的区别、指针的使用场景和存储内容)
数据结构·c++·算法