动态规划总结篇

  1. 808 Soup Servings
  2. 837 新21点
  3. 464 can i win
  4. 最大平均值和
  1. 808 Soup Servings
    想到的方式是通过回溯暴力解,但是很明显不合理。
    dp公式:f(a, b) = 0.25 * (f(a - 4, b) + f(a - 3, b - 1) + f(a - 1, b - 3) + f(a - 2, b - 2)
    double memo[200][200];
    double soupServings(int N) {
        return N >= 4800 ?  1.0 : f((N + 24) / 25, (N + 24) / 25);
    }
    double f(int a, int b) {
        if (a <= 0 && b <= 0) return 0.5;
        if (a <= 0) return 1;
        if (b <= 0) return 0;
        if (memo[a][b] > 0) return memo[a][b];
        memo[a][b] = 0.25 * (f(a-4,b)+f(a-3,b-1)+f(a-2,b-2)+f(a-1,b-3));
        return memo[a][b];
    }
  1. 837 新21点
    想到的方法还是回溯递归,可以得到正确答案,但是时间复杂度会超。
    dp公式:f(n)=f(n-1)/w + f(n-2)/w + ... + f(n-w)/w
#psuedocode
dp[k] = 1.0 when K <= k <= N, else 0.0
# dp[x] = the answer when Alice has x points
for k from K-1 to 0:
    dp[k] = (dp[k+1] + ... + dp[k+W]) / W
return dp[0]
  1. 464 can i win
    由于是无放回的抽取,所以不能使用动态规划。解法只能是带缓存的递归。

  2. 813 最大平均值和的分组
    状态转移方程:dp[i][k] = max(dp[i][k], dp[j][k - 1] + 1.0 * (sum[i] - sum[j]) / (i - j))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,188评论 0 2
  • One 1 the [ðə, ði:] art.这,那 ad.[用于比较级;最高级前] 2 be [bi:,bi]...
    梁培林阅读 13,147评论 0 10
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,703评论 0 89
  • 选择题部分 1.(),只有在发生短路事故时或者在负荷电流较大时,变流器中才会有足够的二次电流作为继电保护跳闸之用。...
    skystarwuwei阅读 14,782评论 0 7
  • 离家数年,每每想起故乡,想起家,最多的便是吃。我老家在豫南,论吃我认为超出河南绝大多数地市。 背过的诗忘了,走过的...
    伊石榴阅读 3,047评论 5 2

友情链接更多精彩内容