977 AlvinZH过生日

思路

难题。逆推DP。

要明确dp的状态只与是否有选择权有关,而与选择权在谁手里无关。因为不论选择权在谁手里,那个人都会尽可能的获得最大的蛋糕重量。

dp[i]表示分配到第i个物品为止,当前拥有选择权的人能获得的最大蛋糕重量,即蛋糕[i~n]的最大值。以有选择权的的人列一个转移方程,然而因为我们只知道初始选择的是AlvinZH,因此我们要逆推:

dp[i] = max(dp[i+1], sum - dp[i+1] + val[i]);//max(不吃, 吃)

其中sum为[i+1~n]蛋糕总质量,最后dp[1]就是AlvinZH获得的最大价值。

注意:

  • 注释里的吃与不吃并不是一直针对同一个人的,指的是当前有选择权的人对当前蛋糕吃与不吃。
  • 整个过程没有管AlvinZH吃还是不吃,针对的对象是有选择权的那个人。

分析

这道题很有意思,巧妙地避过了选择权在谁手里的问题,dp求解的是有选择权能获得的最大价值,并没有考虑谁有选择权。

逆推也很有意思,因为只知道开始时选择权在AlvinZH手里。

好好理解吧,神奇的DP,你对它一无所知。

参考代码一

//
// Created by AlvinZH on 2017/11/5.
// Copyright (c) AlvinZH. All rights reserved.
//#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;int n;
int sum;//表示i+1~n块蛋糕的总量
int val[105], dp[105];int main()
{while(~scanf("%d", &n)){sum = 0;memset(dp, 0, sizeof(dp));for(int i = 1; i <= n; ++i)scanf("%d", &val[i]);for(int i = n; i >= 1; --i){dp[i] = max(dp[i + 1], sum - dp[i + 1] + val[i]);//max(不吃, 吃)。sum += val[i];}printf("%d\n", dp[1]);}
}

转载于:https://www.cnblogs.com/AlvinZH/p/7867597.html

977 AlvinZH过生日(背包DP大作战S)相关推荐

  1. 976 AlvinZH想回家(背包DP大作战T)

    976 AlvinZH想回家 思路 如果在第i小时有一些飞机延误,那么一架飞机的c值越大,这一小时产生的损失也越大.而使这一小时产生的损失尽可能的小并不会导致接下来时间产生的损失增大.因此应当每一小时 ...

  2. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  3. hdu 5234 Happy birthday 背包 dp

    Happy birthday Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  4. Vijos P1836 HYS与七夕节大作战

    P1836HYS与七夕节大作战 Accepted 背景 一年一度的七夕节到了,HYS又开始烦恼他的约会安排,作为一名后辈,你被他选中来帮助他. 描述 由于HYS有很多名女友,所以他不可能在一天之内和所 ...

  5. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  6. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  7. 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp

    题目描述 给出一棵n个点的树,每个点有黑白两种颜色.q次询问,每次询问给出x和y,问能否选出一个x个点的联通子图,使得其中黑点数目为y. 输入 第一行一个正整数 T 表示数据组数. 对于每一组数据,第 ...

  8. 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵

    洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...

  9. (背包dp) 背包N讲

    文章目录 前言 相关练习题 模板题 01背包 完全背包 多重背包 小数据范围 (可朴素暴力) 中等数据范围 (二进制优化) 大数据范围 (单调队列优化) 混合背包 二维费用背包 分组背包 有依赖的背包 ...

最新文章

  1. Hibernate和iBATIS 优缺点比较
  2. Oracle 11gR2构建RAC之(3)--安装grid前环境检测
  3. python降序排列说true不存在_Python数据类型串讲(中)
  4. challenging Programming questions
  5. (转)网上常用免费WebServices集合
  6. android 音频加载hal so调试
  7. 信息学奥赛一本通 1049:晶晶赴约会 | OpenJudge NOI 1.4 11
  8. butter滤波器是iir吗_IIR低通滤波器求改
  9. SpringCloud微服务权限控制(一)概述
  10. ppt怎么一次性改全部字体_PPT的字体怎么选择?
  11. eclipse-java-2018-09-win32-x86_64配置tomcat(内含更新eclipse,如何解决添加时找不到最新tomcat版本)...
  12. MatlabTrick
  13. Syslog日志中心服务器收集windows和linux客户端日志
  14. 【Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64】 解决方法
  15. scoop bucket add 后仍然报错 Couldn‘t find manifest for
  16. Django搭建网站的个人笔记记录
  17. 软件开发培训学校四大培训标准,引领行业标杆
  18. 如何去掉桌面图标快捷方式的小箭头(小技巧)
  19. day_8——LeetCode1:两数之和
  20. linux中mtd动态加载,Linux 2.6.11 下 MTD驱动情景实例分析

热门文章

  1. Segmentation fault (core dumped)
  2. Object.wait()与Object.notify()的用法
  3. 手机的次世代竞争年代
  4. 《架构师(“拥抱2015”特刊)》发布
  5. pde lec 6 part 2
  6. 如果要和外国人做项目,加入一个teams是第一步,就跟我们的企业微信,钉钉差不多
  7. 问题记录,StartCoroutine(“str)问题
  8. Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
  9. 剑指offer: 不用加减乘除做加法
  10. Linux系统IO分析工具之iotop常用参数介绍