2.3学习总结

news/2025/2/4 9:47:06 标签: 学习

今天做了下上次测试没做出来的题目,作业中做了一题,看了下二叉树(一脸懵B)

P2240:部分背包问题

先求每堆金币的性价比(价值除以重量),将这些金币由性价比从高到低排序。

对于排好序的金币,循环,每当它的总重量少于背包空间,则全部装入,高于背包空间,结束。

将背包剩余空间大小的金币数装入背包。

#include <stdio.h>
#include <stdlib.h>
struct hly
{
    int v;
    int w;
    float b;
};
int main()
{
    struct hly a[105];
    int n,t,i,j;
    float num=0;
    scanf("%d %d",&n,&t);
    for(i=1;i<=n;i++){
        scanf("%d %d",&a[i].v,&a[i].w);
        a[i].b=(float)a[i].w/a[i].v;
    }
    for(i=1;i<=n-1;i++){
        for(j=i+1;j<=n;j++){
            if(a[i].b<a[j].b){
                struct hly t;
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    for(i=1;i<=n;i++){
        if(a[i].v>t)
            break;
        t-=a[i].v;
        num+=a[i].w;
    }
    if(i<n){
        num+=(float)t*(a[i].b);
    }
    printf("%.2lf\n",num);
    return 0;
}

P1757:通天之分组背包

分组背包问题就是在01背包问题的基础之上,多了一个在每个组中选出最优的那个物品(或者不选)。

#include <stdio.h>
#include <stdlib.h>
long long v[1005][1005],w[1005][1005],s[1005],f[1005];
long long max(long long a,long long b)
{
    if(a>b)
        return a;
    else
        return b;
}
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    for(int i=1;i<=n;i++){
        int a,b,c;
        scanf("%d %d %d",&a,&b,&c);
        s[c]+=1;
        v[c][s[c]]=a;
        w[c][s[c]]=b;
    }
    for(int i=1;i<=n;i++){
        for(int j=m;j>=1;j--){
            for(int k=1;k<=s[i];k++){
                if(v[i][k]<=j){
                    f[j]=max(f[j],f[j-v[i][k]]+w[i][k]);
                }
            }
        }
    }
    printf("%lld",f[m]);
    return 0;
}

P1540:机器翻译

显而易见通过队列进行求解。将队列头跟队列尾初始化为1

对于输入的每个数,查询队列中是否含有这个数,通过变量flag的值来检测有无。

队列中没有则判断队列尾跟头的差值是否大于内容存量,大于的话将队列头出队,head++;将这个数存入队列尾,tail++;查询次数加1。

#include <stdio.h>
#include <stdlib.h>
struct hly
{
    int data[1005];
    int head;
    int tail;
};
int main()
{
    struct hly q;
    int m,n,num=0;
    q.head=1;
    q.tail=1;
    scanf("%d %d",&m,&n);
    for(int i=1;i<=n;i++){
        int s,flag=0;
        scanf("%d",&s);
        for(int j=q.head;j<q.tail;j++){
            if(q.data[j]==s){
                flag=1;
                break;
            }
        }
        if(flag==0){
            if(q.tail-q.head>=m){
                q.head++;
            }
            q.data[q.tail]=s;
            num++;
            q.tail++;
        }
    }
    printf("%d\n",num);
    return 0;
}


http://www.niftyadmin.cn/n/5841460.html

相关文章

w191教师工作量管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

DeepSeek 原理解析:与主流大模型的差异及低算力优势

在人工智能大模型蓬勃发展的浪潮中&#xff0c;DeepSeek 以其独特的技术路线和出色的性能表现脱颖而出。与主流大模型相比&#xff0c;DeepSeek 不仅在技术原理上有着显著的差异&#xff0c;还展现出了在较低算力下达到 OpenAI API 水平的卓越能力。本文将深入剖析这些独特之处…

7-1 什么是机器学习

什么是机器学习&#xff1f;上图展示了一段面试官与“机器学习程序”的对话&#xff1a; 面试官&#xff1a;9 10 等于多少&#xff1f; 答&#xff1a;3 面试官&#xff1a;差远了&#xff0c;是19。 答&#xff1a;16 面试官&#xff1a;错了&#xff0c;是19。 答&#xf…

二叉搜素树中的插入操作(力扣701)

为了满足题目的要求&#xff0c;我们可以选择在叶子节点之后添加节点&#xff0c;这样既可以满足题目要求&#xff0c;也不会破坏二叉搜索树的结构。在二叉搜索树中递归的时候&#xff0c;要根据大小&#xff0c;选择进行左递归还是右递归。当递归到空节点的时候&#xff0c;我…

docker pull Error response from daemon问题

里面填写 里面解决方案就是挂代理。 以虚拟机为例&#xff0c;将宿主机配置端口设置&#xff0c;https/http端口设为7899 配置虚拟机的http代理&#xff1a; vim /etc/systemd/system/docker.service.d/http-proxy.conf里面填写&#xff0c;wq保存 [Service] Environment…

Docker 部署教程jenkins

Docker 部署 jenkins 教程 Jenkins 官方网站 Jenkins 是一个开源的自动化服务器&#xff0c;主要用于持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;过程。它帮助开发人员自动化构建、测试和部署应用程序&#xff0c;显著提高软件开发的效率和质量…

C++初阶 -- vector容器的接口详解

目录 一、vector简介 二、vector的构造函数 三、vector的迭代器 四、vector 空间增长问题&#xff08;主要谈resize和reserve&#xff09; 4.1 resize 4.2 reserve 五、vector 增删查改 5.1 push_back 和 pop_back(尾插、尾删) 5.2 find函数 5.3 insert 和 erase函数 …

android java 用系统弹窗的方式实现模拟点击动画特效

接上一篇&#xff1a;android java系统弹窗的基础模板-CSDN博客 本篇记录的是系统弹窗的一个应用示例&#xff1a;实现点击动画效果 首先模拟点击的实现参考&#xff1a;android模拟点击_motionevent upevent motionevent.obtain(systemclo-CSDN博客 动画效果&#xff0c;是…