
数据结构
数据结构
搞经济的程序员
只顾风雨兼程
展开
-
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 · 1167 阅读 · 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 · 389 阅读 · 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 · 380 阅读 · 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 · 2175 阅读 · 0 评论