数据结构
数据结构
搞经济的程序员
只顾风雨兼程
展开
-
11.26刷题
NC18 数位染色描述:小红拿到了一个正整数 。她可以将其中一些数位染成红色。然后她想让所有染红的数位数字之和等于没染色的数位数字之和。她不知道能不能达成目标。你能告诉她吗?示例输入:1234567输出:Yes说明:将3、4、7染成红色即可,这样3+4+7=1+2+5+6思路:很明显如果所有数字之和加起来为一个奇数,肯定无法达成目标,因为一个奇数无法被2整除。所以我们需要一个偶数。得到一个偶数之后,我们需要在数组中找到n个数使他的和为sum/2,问题简化成一个0、1背包问题。代原创 2021-11-26 20:27:11 · 985 阅读 · 0 评论 -
11.23
NC12 完全背包描述你有一个背包,最多能容纳的体积是V。现在有n种物品,每种物品有任意多个,第i种物品的体积为viv_{i}vi ,价值为wiw_{i}wi。(1)求这个背包至多能装多大价值的物品?(2)若背包恰好装满,求至多能装多大价值的物品?思路恰好装满则初始化dp数组为-inf初始化dp[0]为零,如果dp[-1]依旧为-inf则说明背包无法装满,装最大价值则可以将dp数组全部初始化为零,表示容量为i时可以不装物品。代码n,V =list(map(int, input().s原创 2021-11-24 09:47:57 · 248 阅读 · 0 评论 -
11.22刷题
NC20 串问有多少字符串满足以下条件:长度不超过nnn包含子序列us 结果对1e9+7取模思路:设dp[n][0]为长度为n且不包括字母u的字符串数目,dp[n][1]表示长度为n只包括u的字符串数目,dp[n][2]表示包括长度为n包含us的字符串数目,则答案为∑i<=ndp[i][2]\sum_{i<=n}{dp[i][2]}i<=n∑dp[i][2].可得:{dp[n][2]=dp[n−1][1]+dp[n−1][2]∗26dp[n][1]=dp[n−1][0]+d原创 2021-11-22 09:58:44 · 273 阅读 · 0 评论 -
11.21刷题日记
动态规划 :牛客NC2 不相邻取数1、描述:小红拿到了一个数组。她想取一些不相邻的数,使得取出来的数之和尽可能大。你能帮帮她吗?思路: 用dp数组表示取前i个数时所达到的和最大值,依据题意可轻松获得状态转移方程:dp[i]=max(dp[i-1],dp[i-2]+num[i])代码:n = int(input())num = list(map(int, input().split(' ')))dp = [0]*(len(num)+1)dp[1] = num[0]for i in range原创 2021-11-21 09:56:06 · 1932 阅读 · 0 评论