食堂评测(python实现)

食堂测评(通信网理论基础)

成都某大学已建成n座食堂。国庆期间,小朱同学受朋友小白的邀请,评测该大学的食堂。每座食堂在大众点评上有一定的评分,每测评一个食堂获得该食堂分数;同时,每座食堂也有一定概率吃到卫生不达标的食物。小朱要想尽一切办法,打卡得到尽可能多的分数。现在,为了保证晚上能愉快的玩耍,小白设定了一个踩坑概率。他认为只要概率低于这个水平,他们就不会闹肚子。

输入:第一行样例数量t。对每一个样例,第一行为踩坑概率P(浮点数),和食堂数量n<1000,之后n行,每行为一个评分m<10000,一个概率p(浮点数)。
输出:对于每一个样例,输出打卡到的最大评分。

样例:
输入
3
0.04 3
1 0.02
2 0.03
3 0.05
0.06 3
2 0.03
2 0.03
3 0.05
0.13
1 0.03
2 0.02
3 0.05
输出:
2
4
6

题目分析:
采用01背包思路进行处理解决。

import sys, time,math
start_1=time.time()
ML=0
M1=[]
M1_S=[]
M2_P=[]
Memory_formal=[]
Memory_latter=[]
cou=0

def backet(M1_S,M2_P,Cap):
    if cou==1:
        for item in range(Cap+1):
            Memory_latter.append(0)
    for i in range(len(M1_S)):
        Memory_formal.clear()
        for i0 in range(len(Memory_latter)):
            Memory_formal.append(Memory_latter[i0])
        for item in range(1,Cap+1):
            if M1_S[i] <= Cap:
                if item-M1_S[i]<0:
                    Memory_latter[item] = Memory_formal[item]
                else:
                    if(Memory_formal[item] > Memory_formal[item-M1_S[i]]+M2_P[i]):
                        Memory_latter[item]=Memory_formal[item]
                    else:
                        Memory_latter[item]=Memory_formal[item-M1_S[i]]+M2_P[i]

f = open('1.txt', 'r')
Count=int(f.readline())
for item1 in range(Count):
    cou=0
    M1.clear()
    M1_S.clear()
    M2_P.clear()
    ML=0
    Memory_formal.clear()
    Memory_latter.clear()
    Cap,Num=f.readline().split()
    Num=int(Num)
    for item2 in range(Num):
        a,b=f.readline().split()
        ml=len(b)
        if(ML<ml):
            ML=ml
        M1.append(eval(b))
        M2_P.append(int(eval(a)))
    Cap=int(eval(Cap)*(10**(ML-2)))
    for item3 in range(Num):
        M1_S.append(int((M1[item3])*(10**(ML-2))))
    cou=cou+1
    backet(M1_S,M2_P,Cap)
    print(Memory_latter[-1])
end_1= time.time()
print('Running time: %s Seconds' % (end_1 - start_1))

读取数据存放至txt文档中即可。

测试结果如下:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值