Contest3111 - 计科2101~2104算法设计与分析上机作业07

news2024/9/28 19:21:08

问题 A: 有重复元素的排列问题

题目描述

设R={ r 1 , r 2 , …, r n }是要进行排列的n个元素。其中元素r 1 , r 2 , …, r n 可能相同。试设计一个算法,
列出R的所有不同排列。给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。

输入

第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。

输出

按字典序输出计算出的n个元素的所有不同排列,输出最后1行中的数是排列总数。

样例输入 

4
aacc

样例输出 

aacc
acac
acca
caac
caca
ccaa
6

嗯,next_permutation

记得要提前sort一下嗷

#include<bits/stdc++.h>
#define int long long
using namespace std;

char a[505];
char b[505];

int n;
vector<int>ans;
int num=1;

void fun(){
    cout<<b<<endl;
    while(next_permutation(b,b+n)){
        printf("%s\n",b);
        num++;
    }
}
signed main(){
    cin>>n;
    scanf("%s",a);
    sort(a,a+n);
    strcpy(b,a);
    fun();
    cout<<num<<endl;
}

问题 B: 字符序列

题目描述

从三个元素的集合[A,B,C]中选取元素生成一个 N 个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N = 5 时 ABCBA 是合格的,而序列 ABCBC与 ABABC 是不合格的,因为其中子序列 BC,AB 是相同的。
对于由键盘输入的 N(1<=N<=12),求出满足条件的 N 个字符的所有序列和其总数。

输入

4

输出

72

dfs咯,注意边界,dfs讨厌没有边界感的人!!!

那么,什么是边界呢?

当然就是长度大于等于n辣,还有嗷,长度大于等于3的时候,得判断符不符合条件才能push进去!不要随便就crush,dfs会抗拒的捏~

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
int ans=0;
vector<int>a;

void dfs(){
    if(a.size()>=n){
        ans++;
        return;
    }
    for(int i=1;i<=3;i++){
        if(a.size()<3){
            a.push_back(i);
        }
        else{
            if(a[a.size()-1]==a[a.size()-3]&&a[a.size()-2]==i){
                continue;
            }
            else{
                a.push_back(i);
            }
        }
        dfs();
        a.pop_back();
    }
}
signed main(){
    cin>>n;
    a.clear();
    dfs();
    cout<<ans<<endl;
}

问题 C: 自然数的拆分问题

题目描述

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。

当n=7共14种拆分方法:

7=1+1+1+1+1+1+1

7=1+1+1+1+1+2

7=1+1+1+1+3

7=1+1+1+2+2

7=1+1+1+4

7=1+1+2+3

7=1+1+5

7=1+2+2+2

7=1+2+4

7=1+3+3

7=1+6

7=2+2+3

7=2+5

7=3+4

样例输入 

7

样例输出 

1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4

提示

2=<n<=10

哈哈,和上一题很像捏,还是注意边界感就行辣

边界是什么?

和等于n就输出,和大于n直接return

注意咯,是个递增序列!所以我们不是从1开始,而是从t开始

t是什么?

哈哈,我也说不清,自己悟吧哈哈哈

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
vector<int>a;
int num;

void dfs(int t){
    if(num==n){
        cout<<a[0];
        for(int i=1;i<a.size();i++){
            cout<<"+"<<a[i];
        }
        cout<<endl;
        return ;
    }
    else if(num>n){
        return ;
    }
    for(int i=t;i<n;i++){
        a.push_back(i);
        num+=i;
        dfs(i);
        num-=i;
        a.pop_back();
    }
}

signed main(){
    cin>>n;
    dfs(1);
}

问题 D: 数字三角形问题,《算法入门经典》P259,动态规划,刘丽萍,CCF六级

题目描述

下图给出了一个数字三角形,请编写一个程序,计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。 
(1)每一步可沿左斜线向下或右斜线向下 
(2)1 < 三角形行数 < 100 
(3)三角形数字为0,1,…99 

这里写图片描述

输入

有很多个测试案例,对于每一个测试案例, 通过键盘逐行输入,第1行是输入整数(如果该整数是0,就表示结束,不需要再处理),表示三角形行数n,然后是n行数

输出

输出最大值。

样例输入 

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出 

30

呼呼,这是一个隐藏的动态规划,找到转移方程就好啦

转移方程是什么?

当然是:dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i-1][j-1]);

然后就没了。。。

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
int a[105][105];
int dp[105][105];

void fun(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            dp[i][j]=a[i][j]+max(dp[i-1][j],dp[i-1][j-1]);
        }
    }
    int max=0;
    for(int i=1;i<=n;i++){
        if(max<dp[n][i]){
            max=dp[n][i];
        }
    }
    cout<<max<<endl;
}

signed main(){
    while(cin>>n){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                cin>>a[i][j];
            }
        }
        fun();
    }
}

问题 E: 最大间隙问题

题目描述

给定n个实数X1,X2,X3...Xn,求这n个数在实轴上相邻两个数之间的最大差值。

输入

输入有两行,第一行为n(0<n<=300000),第二行为n个实数,实数范围在-100000000-100000000

输出

输出为两个相邻实数间的最大差值

样例输入 

5
2.3 3.1 7.5 1.5 6.3

样例输出 

3.2

 呼呼,这里偷鸡,直接用set,哈哈哈,我记着正规写法是分治来着?

忘了,管他呢,能过就行,呼呼

#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
set<double>a;

signed main(){
    cin>>n;
    for(int i=0;i<n;i++){
        double temp=0;
        scanf("%lf",&temp);
        a.insert(temp);
    }
    double ans=0;
    auto it = a.begin();
    auto pre=it;
    it++;
    for(;it != a.end();it++){
        double num=*it - *pre;
        if(num>ans){
            ans=num;
        }
        pre=it;
    }
    cout<<ans<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android四大组件之一-Activity实现原理分析

前言&#xff1a; 这篇文章是我花费时间最久的一篇文章&#xff0c;整整的两个月。整个流程繁琐是一个方面的原因&#xff0c;另外一个原因是我想尽可能的把整个流程的逻辑尽可能详细的一一描述出来&#xff0c;以及结合到我们项目中遇到的一些问题来进行解释&#xff0c;毕竟…

【五一创作】VS+Qt主界面内嵌自定义控件的四种方法以及不同自定义控件数据交互

前言 在Qt界面开发过程中&#xff0c;一个主界面或者主窗口看成是各个控件排列组合后的集合&#xff0c;对于一些项目而言&#xff0c;有些常用的控件可以封装成自己想要的控件样式并且复用&#xff0c;比如说&#xff0c;log显示控件&#xff0c;图像/视频显示控件等&#xf…

【ros2】ros melodic迁移到ros2 dashing过程中碰到的问题及解决方法

序言 总结踩坑经历&#xff0c;以利他人 1. error: forming pointer to reference type … & 报错原因&#xff1a; ros2回调函数的参数不能是引用形式 &&#xff0c;需要去除& 解决方法&#xff1a; 如果是指针引用&#xff0c;直接去除引用 void Callback(con…

【Java开发】Spring Cloud 11:Gateway 配置 ssl 证书(https、http、域名访问)

最近研究给微服务项目配置 ssl 证书&#xff0c;如此才可以对接微信小程序&#xff08;需要使用 https 请求&#xff09;。传统单体项目来说&#xff0c;首先往项目中添加证书文件&#xff0c;然后在配置文件中配置 ssl 证书路径、密码等相关信息&#xff1b;那么微服务这么多项…

机器学习强基计划8-5:图解局部线性嵌入LLE算法(附Python实现)

目录 0 写在前面1 流形学习2 局部线性嵌入算法2.1 什么是局部线性嵌入&#xff1f;2.2 算法原理推导 3 Python实现3.1 算法流程3.2 核心代码3.3 可视化 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的…

基于学生成绩管理系统(附源代码及数据库)

基于Ecplise&#xff0c;jsp的学生成绩管理系统 目录 登录页面 系统主页 管理员账号管理 学生查询 课程管理 成绩管理 后台数据库 源代码下载&#xff08;含数据库&#xff09; 毕设项目专栏 分为以下四大板块&#xff1a; 系统用户管理: 包含管理员账号管理&#…

【一起撸个DL框架】5 实现:自适应线性单元

CSDN个人主页&#xff1a;清风莫追欢迎关注本专栏&#xff1a;《一起撸个DL框架》GitHub获取源码&#xff1a;https://github.com/flying-forever/OurDL 文章目录 5 实现&#xff1a;自适应线性单元&#x1f347;1 简介2 损失函数2.1 梯度下降法2.2 补充 3 整理项目结构4 损失函…

第二十七章 Unity碰撞体Collision(下)

本章节我们继续研究碰撞体&#xff0c;并且探索一下碰撞体与刚体之间的联系。我们回到之前的工程&#xff0c;然后给我们的紫色球体Sphere1也添加一个刚体组件。如下所示 此时&#xff0c;两个球体都具备了碰撞体和刚体组件。接下来&#xff0c;我们Play运行查看效果 我们发现&…

第二十六章 Unity碰撞体Collision(上)

在游戏世界中&#xff0c;游戏物体之间的交互都是通过“碰撞接触”来进行交互的。例如&#xff0c;攻击怪物则是主角与怪物的碰撞&#xff0c;触发机关则是主角与机关的碰撞。在DirectX课程中&#xff0c;我们也大致介绍过有关碰撞检测的内容。游戏世界中的3D模型的形状是非常复…

浅谈区块链1.0-比特币

1. 比特币解决的问题 高度自治&#xff1a;国际经济危机无国界贸易&#xff1a;不同国家进行的贸易或者不同平台进行贸易 不可窜改&#xff1a;例如银行交易可能会被窜改数据 隐私安全&#xff1a;传统汇款方式会暴露你的个人信息&#xff0c;一旦数据库被别人入侵&#xff0c…

android基础知识复习

架构&#xff1a; 应用框架层&#xff08;Java API Framework&#xff09;所提供的主要组件&#xff1a; 名称功能描述Activity Manager&#xff08;活动管理器&#xff09;管理各个应用程序生命周期&#xff0c;以及常用的导航回退功能Location Manager&#xff08;位置管理器…

SpringBoot整合Mybatis-plus实现多级评论

在本文中&#xff0c;我们将介绍如何使用SpringBoot整合Mybatis-plus实现多级评论功能。同时&#xff0c;本文还将提供数据库的设计和详细的后端代码&#xff0c;前端界面使用Vue2。 数据库设计 本文的多级评论功能将采用MySQL数据库实现&#xff0c;下面是数据库的设计&…

Boonz-KeygenMe#1(★★★)

运行程序 错误&#xff1a; 查壳 没有壳&#xff0c;是汇编写的程序 载入OD 前面是在读取输入内容&#xff0c;到这里开始做计算了 分析 首先遍历了用户名&#xff0c;计算结果保存在EBX&#xff0c;在存放到 0x40E0F8 对EBX中的值再次计算&#xff0c;最后结果保存到 …

JavaFX: Java音乐播放读取歌词

JavaFX: Java音乐播放读取歌词 1、lrc歌词文件2、解析lrc歌词2.1 读取每行歌词2.2 解析歌词时间标签Time-tag2.3 解析歌词标识标签ID-tags2.4 创建对象包含歌词相关信息 3、播放显示歌词** 相关文献 JavaFX: Java音乐播放 1、lrc歌词文件 lrc歌词文件的扩展名 1、标准格式&a…

图像处理:Retinex算法

目录 前言 概念介绍 Retinex算法理论 单尺度Retinex&#xff08;SSR&#xff09; 多尺度Retinex&#xff08;MSR&#xff09; 多尺度自适应增益Retinex&#xff08;MSRCR&#xff09; Opencv实现Retinex算法 SSR算法 MCR算法 MSRCR算法 效果展示 总结 参考文章 前…

基频建模方法总结

基频F0建模方法 语音合成领域需要对基频进行建模&#xff0c;具体到文语转换TTS、语音转换VC、情感语音转换EVC领域等。 语音合成F0 包括文语转换&#xff0c;情感语音转换 TTEF&#xff1a;text-to-emotional-features synthesis EVC&#xff1a;emotional voice conversio…

这些你熟知的 app 和服务,都用上了人工智能

从微软在 Microsoft 365 服务中全面整合 GPT-4 能力 &#xff0c;让 PPT、Word 文档、Excel 表格的制作变成了「一句话的事」&#xff0c;到 Adobe 刚刚发布 Adobe Firefly模型集合&#xff0c;让图形设计、字体风格、视频渲染乃至 3D 建模的门槛显著降低——你我熟知的那些工…

idea的快捷键

一.idea的快捷键: 递进选择&#xff1a;ctrl w复制行&#xff1a;ctrl d删除行&#xff1a;ctrl y大小写切换&#xff1a;ctrl shift u展开/折叠&#xff1a;ctrl shift 减号/加号向前/向后&#xff1a;ctrl <— / —>Live Template(例如 输入psvm会自动打出mai…

华为OD机试题,用 Java 解【最远足迹】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不要…

Python实战项目:手势识别控制电脑音量

今天给大家带来一个OpenCV的实战小项目——手势识别控制电脑音量 先上个效果图&#xff1a; 通过大拇指和食指间的开合距离来调节电脑音量&#xff0c;即通过识别大拇指与食指这两个关键点之间的距离来控制电脑音量大小 技术交流 技术要学会分享、交流&#xff0c;不建议闭…