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

2025/5/7 心得

第一题

F. 例题3.2.3 书架

题目描述

Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了。现在,只有书架的顶上还留有一点空间。

所有N(1 <= N <= 20)头奶牛都有一个确定的身高H_i(1 <= H_i <= 1,000,000 - 好高的奶牛>_<)。设所有奶牛身高的和为S。书架的高度为B,并且保证1 <= B <= S。

为了够到比最高的那头奶牛还要高的书架顶,奶牛们不得不像演杂技一般,一头站在另一头的背上,叠成一座“奶牛塔”。当然,这个塔的高度,就是塔中所有奶牛的身高之和。

为了往书架顶上放东西,所有奶牛的身高和必须不小于书架的高度。

塔叠得越高便越不稳定,于是奶牛们希望找到一种方案,使得叠出的塔在高度不小于书架高度的情况下,高度尽可能小。你也可以猜到你的任务了:写一个程序,计算奶牛们叠成的塔在满足要求的情况下,最少要比书架高多少。

输入格式

第1行: 2个用空格隔开的整数:N 和 B

第2..N+1行: 第i+1行是1个整数:H_i

输出格式

第1行: 输出1个非负整数,即奶牛们叠成的塔最少比书架高的高度

样例数据

input


5 1631356

Copy

output


1

Copy

注释

输出说明:

我们选用奶牛1、3、4、5叠成塔,她们的总高度为3 + 3 + 5 + 6 = 17。任何方案都无法叠出高度为16的塔,于是答案为1。

数据规模与约定

时间限制:1 \text {s}1s

空间限制:256 \text {

这道题其实就是用地推,然后呢把这状况判断就行了。

我在写的时候犯了一个错误,把key和sam写反了。

代码如下,

#include<bits/stdc++.h>
using namespace std;
int n,b,h[30],m=1000000000; 
int d(int k,int sum)
{
    if(sum>=b) return sum;
    if(k>n) return m;
    int t1=d(k+1,sum);
    int t2=d(k+1,sum+h[k]);
    return min(t1,t2);
}
int main() {
    freopen("shelf2.in","r",stdin);
    freopen("shelf2.out","w",stdout);
    cin>>n>>b;
    for(int i=1;i<=n;i++) 
    {
        cin>>h[i];
    }
    cout<<d(1,0)-b;
    return 0;
}

二题

G. 例题3.2.4 全排列输出

题目描述

把 1~n 这 n(n<10) 个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入和输出

Input

一个整数n。

Output

按照从小到大的顺序输出所有方案,每行1个。 首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

样例

Sample Input


3

Copy

Sample Output


1 2 31 3 22 1 32 3 13 1 23 2 1

Copy

数据规模与约定

时间限制:1 \text {s}1s

空间限制:256 \text {MB}256MB

这道题其实就是按特定顺序输出所有序列,然后呢输出所有序列要保证不重复,不遗漏。这道题中n值不确定的需要输入根据输入n值,然后呢判断这个层数,循环层数。然后呢就这个通过n值可以判断循环层数这一点可以通过。递推递归函数来控制。

递归函数中每行每层输出的数,如果前面输过的数字,后面递归就不不再输。

代码如下,

#include<bits/stdc++.h>
using namespace std;
int n,a[20];
bool flag[20];
void dfs(int k){
    if(k==n+1)
    {
        for(int j=1;j<n;j++)
        cout<<a[j]<<" ";
        cout<<a[n]<<endl;
        return ;
    }
    for(int j=1;j<=n;j++)
    {
        if(!flag[j]){
            flag[j]=true;
            a[k]=j;
            dfs(k+1);
            flag[j]=false;
        }
    }
}
    int main()
    {
    freopen("test.in","r",stdin);
    freopen("test.out","w",stdout);
    cin>>n;
    dfs(1);
    return 0;
}

第三题。

H. 【递归练习】爬楼梯输出方案2

题目描述

小明的面前有一个n级的台阶,他每次可以上1阶,2阶,3阶,现在他想知道每一种上台阶的方法,请你告诉他。

具体的,请你求出有多少种上台阶的方法;对于每一种上台阶的方法,请你用数字表示每一步的台阶数,并将不同方法按字典序输出

例如,n=3,可行方法为111,12,21,3(4种),其中12表示第一步1个台阶,第二步2个台阶,因此按字典序输出:


411112213

Copy

输入格式

输入一个正整数n,表示台阶数量。

输出格式

第一行输出一个数m,表示上台阶的方法数。 之后m行每行输出一个由“1”、“2”、“3”组成的字符串,表示一种上台阶的方法。

样例数据

input


3

Copy

output


411112213

Copy

数据规模与约定

对于100%的数据,1<=n<=15;

时间限制:1 \text {s}1s

空间限制:256 \text {MB}256MB

这道题其实很简单,只需要在本来也就是第一道题爱因斯坦输出楼梯方案的基础上再加一条语句即可实现。

因为他现在有三个楼梯,所以说呢我们再加一条三。

代码如下,

#include<bits/stdc++.h>
using namespace std;
int n,cnt=0;
string ans[10100];
void f(int k,string p)
{
    if(k>=n){
        if(k==n)
        ans[++cnt]=p;
        return;
    }
    f(k+1,p+"1");
    f(k+2,p+"2");
    f(k+3,p+"3");//添加了一条。
}
int main(){
    freopen("stairs2.in","r",stdin);
    freopen("stairs2.out","w",stdout);
    cin>>n;
    string s0="";
    f(0,s0);
    cout<<cnt<<endl;
    for(int i=1;i<=cnt;i++)
    cout<<ans[i]<<endl;
    return 0;
}

第四题。

I. 只有1或0的数

题目描述

如果一个正整数,其各个数位上的数字均满足要么是 00,要么是 11,则称该数字为 1010 数。

例如,11 和 1010 都是 1010 数。

给定一个整数 nn。

请你计算,1 \sim n1∼n 中有多少个 1010 数。

输入格式

一行,一个整数 nn。

输出格式

一个整数,表示 1010 数的数量。

样例数据

input


10

Copy

output


2

Copy

数据规模与约定

前六个测试点满足 1 \le n \le 1001≤n≤100。

所有测试点满足 1 \le n \le 10^91≤n≤109。

时间限制:1 \text {s}1s

空间限制:256 \text {MB}256MB

消息其实就是求10shu。

如果这个x小于等于输入这个数,那么就证明有一个10数。然后呢,sum++

然后呢10数可能是一或者可能是零,所以说结尾话是就是诚实,并下一条是x乘10+1。

代码如下,

#include<bits/stdc++.h>
using namespace std;
int n,sum; 
void d(int x)
{
    if(x<=n)sum++;
    else return ;
    d(x*10);
    d(x*10+1);
}
int main(){
    freopen("10num.in","r",stdin);
    freopen("10num.out","w",stdout);
    cin>>n;
    d(1);
    cout<<sum;
    return 0;
}

第五题。

J. 例题3.3.1 吃桃子

题目描述

悟空是在研究一个数学问题!

第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个, 以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。

聪明的你, 请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?

输入格式

一个正整数n(1<n<30),表示只剩下一个桃子的时候是在第n天发生的。

输出格式

输出第一天开始吃的时候桃子的总数。

样例数据

input


2

Copy

output


4

Copy

input


4

Copy

output


22

Copy

数据规模与约定

时间限制:1 \text {s}1s

空间限制:256 \text {MB}256MB

这道题我们用递归来写。这题其实很简单。

只需要让一个数一从第一天到第n减一天,每天加一。在成2就行了我

代码如下,

#include<bits/stdc++.h>
using namespace std;
int n;
int cnt=0,a=1;
int main()
{
    freopen("peach.in","r",stdin);
    freopen("peach.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n-1;i++)
    {
        a=(a+1)*2;
    }
    cout<<a;
    return 0;   

相关文章:

  • E+H流量计与Profibus DP主站转Modbus RTU/TCP网关通讯
  • 【计算机网络】高频计网面试总结
  • Unity基础学习(十二)核心系统—物理系统之碰撞检测组件篇(1)刚体,碰撞体,材质
  • 密码学--希尔密码
  • 如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例
  • 三层交换机,单臂路由(用DHCP自动配置ip+互通+ACL
  • vue3: pdf.js 3.4.120 using javascript
  • LeetCode 513 找树左下角的值 LeetCode 112 路径总和 LeetCode106 从中序与后序遍历序列构造二叉树
  • 单片机-STM32部分:13-1、蜂鸣器
  • AI与IoT携手,精准农业未来已来
  • 接口自动化测试设计思路--设计实战
  • 【信息安全相关基础篇:了解签名与验签是什么及用途】
  • 蓝桥杯13届 卡牌
  • Dapp开发-如何开发一个dapp
  • Transformer——Q74 推导动态FFN(Dynamic FFN)的门控权重更新公式
  • 【内蒙古】《内蒙古自治区本级政务信息化建设项目预算支出标准(试行)》(内财预〔2024〕1449号)-费用标准解读系列
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景
  • 交叉类型的属性合并规则
  • 数组作为指针计算大小时的误区
  • 扩展:React 项目执行 yarn eject 后的 config 目录结构详解
  • 美英贸易协议|不,这不是一份重大贸易协议
  • 首映丨纪录电影《滚烫年华》:献给所有奋斗者
  • 央行:当前我国债券市场定价效率、机构债券投资交易和风险管理能力仍有待提升
  • 19岁女生注射头孢离世后续:院方道歉,医生停职,监管介入
  • 【社论】三个“靠谱”为市场注入确定性
  • 央行:5月8日起7天期逆回购操作利率由此前的1.50%调整为1.40%