学python的第十三天---小蓝(4)

  • 贪心
    • 1、活动安排问题
    • 2、区间覆盖问题
    • 3、最优装载问题
    • 4、多机调度问题
  • 一、答疑(贪心)
  • 二、巧克力(贪心)
  • 三、顺子日期(模拟)
  • 四、特殊时间(模拟)
  • 五、乘积尾零(模拟)
  • 六、平方和(模拟)
  • DP
  • DP记忆化
    • 最经典的DP问题:0/1背包
      • 小明的背包1
      • 代码1:不带空间优化的
      • 代码2:含有空间优化的
      • 小明背包2
      • 装箱问题(线性DP,0/1背包)
      • 2022
      • 不用滚动数组,写法一:
      • 用滚动数组,写法2:
      • 过河卒

贪心

在这里插入图片描述
在这里插入图片描述

1、活动安排问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、区间覆盖问题

在这里插入图片描述
在这里插入图片描述

3、最优装载问题

在这里插入图片描述

4、多机调度问题

在这里插入图片描述

一、答疑(贪心)

在这里插入图片描述
在这里插入图片描述
关键是列出通式!

n=int(input())
q=[]
for i in range(n):
    s,a,e=map(int,input().split())
    q.append((s,a,e,s+a+e))
q.sort(key =lambda x:x[3])
res=0
for i in range(0,n-1):
    res+=(n-i-1)*q[i][3]+q[i][0]+q[i][1]
res+=q[n-1][0]+q[n-1][1]
print(res)

二、巧克力(贪心)

在这里插入图片描述
有一个点运行超时了

n, kind = map(int, input().split())
all_list = []
for i in range(kind):
   info_list = [int(i) for i in input().split(' ')]
   all_list.append(info_list)
all_list.sort(key=lambda x: x[0])


def solve(n, all_list):
   c = 0
   days = [i for i in range(1, n+1)]
   days = sorted(days, reverse=True)
   for i in days:
       tmp_c = 0
       for j in all_list:
           if j[2] > 0:
               if j[1] >= i:
                   tmp_c += j[0]
                   index = all_list.index(j)
                   all_list[index][2] -= 1
                   break
       if tmp_c == 0:
           return -1
       else:
           c += tmp_c
   return c


print(solve(n, all_list))

三、顺子日期(模拟)

在这里插入图片描述

mon=[0,31,28,31,30,31,30,31,31,30,31,30,31]
def check(s):
    if "012" in s:
        return True
    if "123"in s:
        return True
    return False

res=0
s="2022"
for i in range(1,12+1):
    for j in range(1,mon[i]+1):
        if i<10:
            ss=s+"0"+str(i)
        else:
            ss=s+str(i)
        if j<10:
            ss=ss+"0"+str(j)
        else:
            ss=ss+str(j)
        if check(ss):
            # print(ss)
            res+=1
print(res)

四、特殊时间(模拟)

在这里插入图片描述


day_per_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#检查日期D是否合法
def check_D(D):
    month = D // 100
    day = D % 100
    if month < 1 or month > 12:
        return 0
    if day < 1 or day > day_per_month[month]:
        return 0
    return 1
#检查时刻H是否合法
def check_H(H):
    h = H // 100
    m = H % 100
    if h < 0 or h > 23:
        return 0
    if m < 0 or m > 59:
        return 0
    return 1
ans = 0
#枚举第一个数字
for a in range(10):
    #枚举第二个数字
    for b in range(10):
        if a == b:
            continue
        #合法数量
        N_Y, N_D, N_H = 4, 0, 0
        A = [a, a, a, a]
        #枚举四种情况aaab、aaba、abaa、baaa
        for i in range(4):
            A[i] = b
            number = 0
            for j in A:
                number = number * 10 + j
            N_D += check_D(number)
            N_H += check_H(number)
            A[i] = a
        ans += N_Y * N_D * N_H
print(ans)

五、乘积尾零(模拟)

在这里插入图片描述

a=[5650,4542,3554,473,946,4114,3871,9073,90,4329,2758,7949,6113,5659,5245,7432,3051,4434,6704,3594,9937,
   1173,6866,3397,4759,7557,3070,2287,1453,9899,1486,5722,3135,1170,4014,5510,5120,729,2880,9019,
   2049,698,4582,4346,4427,646,9742,7340,1230,7683,5693,7015,6887,7381,4172,4341,2909,2027,7355,5649,
   6701,6645,1671,5978,2704,9926,295,3125,3878,6785,2066,4247,4800,1578,6652,4616,1113,6205,3264,2915,
   3966,5291,2904,1285,2193,1428,2265,8730,9436,7074,689,5510,8243,6114,337,4096,8199,7313,3685,211 ]
res=1
for i in a:
    res*=i
ans=0
while res%10==0:
    ans+=1
    res//=10
print(ans)

六、平方和(模拟)

在这里插入图片描述

def check(u):
    u=str(u)
    if "2" in u or "0" in u or "1" in u or "9" in u:
        return True
    return False

res=0
for i in range(1,2019+1):
    if check(i):
        res+=i*i

print(res)

DP

在这里插入图片描述

DP记忆化

在这里插入图片描述
动态规划又叫暴力的剪枝

最经典的DP问题:0/1背包

小明的背包1

在这里插入图片描述

代码1:不带空间优化的

def solve(n,C):
    for i in range(1,n+1):
        for j in range(0,C+1):
            if c[i]>j:#装不下的情况
                dp[i][j]=dp[i-1][j]
            else:
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i])
    return dp[n][C]

N=3011
dp=[[0 for i in range(N)]for j in range(N)]
w=[0]*N
c=[0]*N
n,C=map(int,input().split())
for i in range(1,n+1):
    c[i],w[i]=map(int,input().split())
print(solve(n,C))

代码2:含有空间优化的

def solve(n,C):
    now = 0
    old = 1
    for i in range(1,n+1):
        old,now = now,old #交换
        for j in range (0,C+1):
            if c[i] > j: dp[now][j] = dp[old][j]
            else: dp[now][j] = max(dp[old][j], dp[old][j-c[i]]+w[i])
    return dp[now][C]

N = 3011
dp = [[0 for i in range(N)] for j in range(2)] #注意先后
w = [0]*N
c = [0]*N
n, C = map(int, input().split())
for i in range(1, n+1):  c[i], w[i] = map(int, input().split())
print(solve(n, C))

小明背包2

在这里插入图片描述
在这里插入图片描述

N, V = map(int, input().split())
dp = [0]*(V+1)
for _ in range(N):
  w, v = map(int, input().split())
  for j in range(w, V+1):
    dp[j] = max(dp[j], dp[j-w]+v)
print(dp[-1])

装箱问题(线性DP,0/1背包)

在这里插入图片描述
在这里插入图片描述

V=int(input())
n=int(input())
dp = [0]*(V+1)
for i in range(n):
  v = int(input())
  for j in reversed(range(v, V+1)):
    dp[j] = max(dp[j], dp[j-v]+v)
print(V-dp[V])

2022

在这里插入图片描述
有两种方法,可以用暴力来做,反正是填空题,就是算C2022^10
在这里插入图片描述
在这里插入图片描述

不用滚动数组,写法一:

dp=[[[0 for _ in range(2222)]for j in range(11)]for i in range(2222)]
#初始化
for i in range(2023):
    dp[i][0][0]=1
for i in range(1,2023):
    for j in range(1,11):
        for k in range(1,2023):
            if k<i:
                dp[i][j][k]=dp[i-1][j][k]
            else:#从1~i个数里选择前j个数,他们的和为k
                dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-1][k-i]
print(dp[2022][10][2022])

用滚动数组,写法2:

dp=[[0 for _ in range(2222)]for i in range(11)]
#初始化
dp[0][0]=1
for i in range(1,2023):
    for j in range(10,0,-1):
        for k in range(i,2023):
           dp[j][k]+=dp[j-1][k-i]
print(dp[10][2022])

过河卒

在这里插入图片描述

dp=[[0 for i in range(25)]for j in range(25)]
n,m,p,q=map(int,input().split())
n+=2
m+=2
p+=2
q+=2
s=[[0 for i in range(25)]for j in range(25)]
s[p][q]=1
s[p-2][q-1],s[p-1][q-2],s[p+1][q-2],s[p+2][q-1],s[p+2][q+1],s[p+1][q+2],s[p-1][q+2],s[p-2][q+1]=1,1,1,1,1,1,1,1
dp[2][1]=1
for i in range(2,n+1):
    for j in range(2,m+1):
        if s[i][j]==1:
            dp[i][j]=0
        else:
            dp[i][j]=dp[i-1][j]+dp[i][j-1]
print(dp[n][m])

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简历问题总结

熟练掌握java相关知识&#xff0c;如IO流、集合框架、多线程等知识点。 ConcurrentHashMap中大量使用了CAS、多线程分步扩容&#xff0c;红黑树提高了并发情况下的访问速度。 put()操作先初始化Node[]数组table&#xff0c;默认容量是16。初始化Node[]数组前会使用Unsafe类的c…

【HTML系列】第五章 · 表单

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

html制作好看的个人简历(附源码)

文章目录1.设计来源1.1 主界面1.2 基本资料页面1.3 个人名言页面1.4 教育经历页面1.5 联系方式页面1.6 自我评价页面1.7 工作经历页面1.8 兴趣爱好页面1.9 沟通交流页面2.效果和源码2.1 动态效果2.2 源代码2.3 相关个人简历源码源码下载作者&#xff1a;xcLeigh 文章地址&#…

图片怎么转PDF文件格式?推荐这五个免费无损转换方法!

如何将图片转换为PDF&#xff1f;图片格式文件经常用于每个人的日常生活中&#xff0c;但有时候。我们会将多张图片转换为一份PDF文件进行单个文件传输&#xff0c;但很多人不知道如何将图片转换为PDF格式。 今天&#xff0c;我将与大家分享五种简单免费的无损转换方法&#x…

ASP医院管理系统—病历管理系统的设计与实现

病历管理系统是医院管理系统的重要组成,该系统的开发主要包括后台数据库的建立以及前台应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库,而对于后者则要求具有齐全完善的应用程序功能,友好人性化的操作界面。该系统采用现代的办公自动化…

九龙证券|算力大基建来了!交易额提高32倍,打造算力南线主干道

贵州省算力建造规划出炉&#xff0c;三年内算力进步超11倍&#xff0c;打造我国“东数西算”南线主干道。 贵州省发布算力建造规划 日前&#xff0c;贵州省大数据开展管理局发布《关于印发面向全国的算力保证基地建造规划的告诉》&#xff08;以下简称《告诉》&#xff09;。《…

全志V3S嵌入式驱动开发(看原理图)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于嵌入式软件开发的同学来说&#xff0c;你可能不一定要会自己画原理图、做pcb板。但是&#xff0c;别人已经设计好的原理图&#xff0c;自己还是…

〖Python网络爬虫实战⑧〗- requests的使用(二)

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付费…

项目管理案例分析有哪些?

项目管控中遇到的问题有哪些&#xff1f;这些问题是如何解决的&#xff1f; 在项目管理领域&#xff0c;案例分析是一种常见的方法来学习和理解项目管理实践&#xff0c;下面就来介绍几个成功案例&#xff0c;希望能给大家带来一些参考。 1、第六空间&#xff1a;快速响应个性…

【Linux】七、进程间通信(二)

目录 三、system V&#xff08;IPC&#xff09; 3.1 system V共享内存 3.1.1 共享内存的概念 3.1.2 共享内存的原理 3.1.3 创建共享内存(shmget ) 3.1.4 ftok函数 3.1.5 查看共享内存资源 3.1.6 创建共享内存测试代码 3.1.7 再次理解共享内存 3.1.8 释放共享内存(shm…

Redis7搭建主从+哨兵通俗易懂

背景前提–用到的命令 ps -ef |grep redis redis服务器启动(精确启动配置文件位置) redis-server redis6379.conf redis-server redis6380.conf redis-server redis6381.conf redis客户端登录 redis-cli -a 123456 -p 6379 redis-cli -a 123456 -p 6380 redis-cli -a 12345…

蓝桥杯刷题冲刺 | 倒计时1天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;蓝桥杯加油&#xff0c;大家一定可以&#x1f43e; 文章目录我是菜菜&#xff0c;最近容易我犯的错误总结 一些tips 各位蓝桥杯加油加油 当输入输出数据不超过 1e6 时&#xff0c;scanf printf 和…

【Vue】初识Vue(一)

&#x1f697;Vue学习扬帆起航~ &#x1f6a9;本文已收录至专栏&#xff1a;Vue框架 &#x1f44d;由于Vue2与Vue3存在许多相似之处&#xff0c;先开始Vue2学习再进阶到Vue3 我们知道技术的兴起与流行一般都是为了帮助我们解决一类问题使得我们开发体验更加舒适&#xff0c;那么…

C++之多态

文章目录前言一、多态的概念二、多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写&#xff08;覆盖&#xff09;4.虚函数重写的两个例外4.C11中的override和final关键字三、重载、重定义&#xff08;隐藏&#xff09;、重写&#xff08;覆盖&#xff09;的区分四、抽象…

【美赛】2023年ICM问题Z:奥运会的未来(思路、代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【面试】MySQL面试题

文章目录数据库基础知识为什么要使用数据库什么是SQL&#xff1f;什么是MySQL?MySql, Oracle&#xff0c;Sql Service的区别数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式&#xff1f;分别有什么区别&#xff1f;数据库经常使用的函数数据类…

C++设置动态库的版本号(软链接)

1,动态库版本命名规则 假设有一个动态库&#xff1a;libfooSdk.so.1.1.0&#xff0c;其对应的三个名称如下。 realname&#xff1a;libfooSdk.so.1.1.0 soname&#xff1a;libfooSdk.so.1 linkname&#xff1a;libfooSdk.solinux的动态库的命名格式是libfooSdk.so.x.y.z 版本…

大数据概述及其软件生态

一、大数据的诞生 &#xff08;1&#xff09;当全球互联网逐步建成&#xff08;2000年左右&#xff09;&#xff0c;各大企业或政府单位拥有了海量的数据亟待处理。 &#xff08;2&#xff09; 基于这个前提逐步诞生了以分布式的形式&#xff08;即多台服务器集群&#xff09;…

PCB生产工艺流程三:生产PCB的内层线路有哪7步

PCB生产工艺流程三&#xff1a;生产PCB的内层线路有哪7步 在我们的PCB生产工艺流程的第一步就是内层线路&#xff0c;那么它的流程又有哪些步骤呢&#xff1f;接下来我们就以内层线路的流程为主题&#xff0c;进行详细的分析。 由半固化片和铜箔压合而成&#xff0c;用于…

Vue|计算属性

1. 计算属性1.1 差值语法1.2 methods1.3 计算属性1. 计算属性 1.1 差值语法 开始前分别在项目目录创建文件夹及页面如下 需求1&#xff1a;在两个文本框中分别输入姓和名的同时需要在下方将数据进行拼接组装&#xff0c;效果如下图 如果用传统的方式来实现的话&#xff0c;需要…
最新文章