关于我第一份正式且能用的代码的那点小事

关于我第一份正式且能用的代码的那点小事

第一次写csdn,格式啥的就不重要了哈

本人目前大一学生,对数模有一定的兴趣,这次五一建模大赛期间拉了两个小伙伴来试试水,我在其中负责编程。
由于准备不足(或者说不知道怎么准备),三天中我们仨基本全程划水,或者说很努力的去写东西但是就是写不出来啥。以前我一直以来对编程的用法是做作业还有敲一些书上的例题,但是这次却是要求我来自己设计流程,算法,这对我而言是前所未有的。
我们选的题目中,第二问的解答需要涉及到全排列的算法,我一开始觉得很简单,但是没想到问题被我搞得越来越复杂,一遍遍的调试都是报错或者得不到想要的格式。最后我发现用我设想的算法时间复杂度和空间复杂度都太高了,不得已才上网查找了别人的算法。就这样,类似的,我不断查找资料补充自己的程序,虽然写出来的东西很粗糙,并且也不优美,但是最重要的一点,它能用!

以下是我做出来的内容:
(中间那团是因为学不会调用excel数据,一怒之下自己手输)`

a = 1*2*3*4*5*6*7*8*9*10
list0 = [[] for i in range(a)]
k = 0

def dfs (nn):
    list1 = []
    list2 = []
    for i in range(0,nn):
        list1.append(0)
        list2.append(0)
    dfs3(0, list1, list2, nn)

def dfs3(step, list1, list2, nn):
    global k
    if step == nn:
        for i in range(nn):
            list0[k].append(list1[i])
        k = k + 1
        return
    for i in range(0, nn):
        if list2[i] == 0:
            list1[step] = i+1
            list2[i] = 1
            dfs3(step+1, list1, list2, nn)
            list2[i] = 0

dfs(10)
for j in range(0, len(list0)):
    #print(list0[j])
    pass

n = 10
listt = [[] for i in range(n)]
for a in range(10):
    for b in range(4):
        listt[a].append(b)

listt[0] = [13.284036,15.00254583,19.89298511,19.92374681]
listt[1] = [9.858508696,19.9901087,17.87652826,18.96819348]
listt[2] = [20.00491522,16.01775217,15.00021957,15.07654783]
listt[3] = [7.966182609,9.948976087,5.927736957,18.13116087]
listt[4] = [8.813778261,13.69999565,13.03126522,11.21588043]
listt[5] = [19.07314565,20.10351304,14.11238913,13.92635217]
listt[6] = [11.11047391,16.56415217,11.92505,19.12146087]
listt[7] = [16.01254783,8.805497826,18.14938043,16.86268261]
listt[8] = [15.0733087,12.06841304,7.064121739,8.971154348]
listt[9] = [12.93779348,7.017456522,9.050536957,16.03384783]

def caltime(listx):
    t1 = [0]
    for i in range (1, n):
        t1.append(listt[listx[i]-1][1-1] + t1[i-1])

    t2 = [t1[1]]
    for i in range (0, n):
        if t1[i] + listt[listx[i]-1][1-1] > t2[i-1] + listt[listx[i]-1][2-1]:
            t2.append(t1[i] + listt[listx[i]-1][1-1])
        else:
            t2.append(t2[i-1] + listt[listx[i]-1][2-1])

    t3 = [t2[1]]
    for i in range(0, n):
        if t2[i] + listt[listx[i]-1][2 - 1] > t3[i - 1] + listt[listx[i]-1][3 - 1]:
            t3.append(t2[i] + listt[listx[i]-1][2 - 1])
        else:
            t3.append(t3[i - 1] + listt[listx[i]-1][3 - 1])

    t4 = [t3[1]]
    for i in range(0, n):
        if t3[i] + listt[listx[i]-1][3 - 1] > t4[i - 1] + listt[listx[i]-1][4 - 1]:
            t4.append(t3[i] + listt[listx[i]-1][3 - 1])
        else:
            t4.append(t4[i - 1] + listt[listx[i]-1][4 - 1])

    return t4[n-1] + listt[listx[i]-1][4 - 1]

def timecom(list0):
    sum = 0.0
    num = 0.0
    for i in range(0, len(list0)//10):
        if caltime(list0[i]) > sum:
            sum = caltime(list0[i])
            num = i
    return [sum, num]

print(timecom(list0))

嗯,把代码贴上来权且当作
纪念吧
这个是结果
这个是我汇报工作的截图
由于水平原因,我们只做了前两问,不过我还是相信在可以期待的未来里,数模比赛,终究会被我们征服!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值