笔记精选

薯队长写了n篇笔记,编号从1~n,每篇笔记都获得了不少点赞数。
薯队长想从中选出一些笔记,作一个精选集合。挑选的时候有两个规则:
1.不能出现连续编号的笔记。
2.总点赞总数最多
如果满足1,2条件有多种方案,挑选笔记总数最少的那种

输入描述:
输入包含两行。第一行整数n表示多少篇笔记。 第二行n个整数分别表示n篇笔记的获得的点赞数。
(0<n<=1000, 0<=点赞数<=1000)

输出描述:
输出两个整数x,y。空格分割。
x表示总点赞数,y表示挑选的笔记总数。

输入例子1:
4
1 2 3 1

输出例子1:
4 2

 

参考:

动态规划,与打家劫舍类似

n = int(input())
num = list(map(int,input().strip().split()))
if n <= 2:
    r = max(num)
    print(r,end=' ')
    print(1)
else:
    dp = []
    dp.append(num[0])
    dp.append(max(num[0],num[1]))
    d = []
    d.append(1)
    d.append(1)
    for i in range(2,n):
        dp.append(max(dp[i-1],dp[i-2]+num[i]))
        if dp[i-1]<dp[i-2]+num[i]:
            d.append(d[i-2]+1)
        else:
            d.append(d[i-1])
    print(dp[-1],end=' ')
    print(d[-1])

您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

posted @ 2020-08-18 11:12  Andy_George  阅读(210)  评论(0编辑  收藏  举报