题意:有n只兔子需要喂养,每只兔子被喂养后的幸福感取决于与它相邻的兔子中已经被喂养的数量。现在问喂养这n只兔子可以获得的总幸福感最多是多少?

思路:初步分析题目发现,一只兔子被喂养获得的幸福感取决于其它兔子的喂养情况,所有首先想到状压DP。但是n到3000, 所以不行。我们发现兔子获得的幸福感只取决于与它相邻的兔子的幸福感。更准确的说,取决于与它相邻的兔子和它自己被喂养的先后顺序,所以,我们只要表示出与它相邻的兔子和它的喂养先后顺序就解决问题了。设dp[i][0]为已经喂养的前i只兔子,并且第i只兔子比第i + 1只兔子先喂养。dp[i][1]是后喂养,因为我们枚举i状态来更新i + 1状态。因为我们知道了喂养顺序,所以就知道了第i只兔子获得的幸福感。

代码:

#include <bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
#define pii pair<int, int>
#define db double
using namespace std;
const int maxn = 3010;
int val[3][maxn], f[maxn][2];
int main() {
int n;
scanf("%d", &n);
for (int j = 0; j < 3; j++) {
for (int i = 1; i <= n; i++) {
scanf("%d", &val[j][i]);
}
}
f[1][0] = val[0][1];
f[1][1] = val[1][1];
for (int i = 1; i < n - 1; i++) {
f[i + 1][0] = max(f[i][0] + val[1][i + 1], f[i][1] + val[0][i + 1]);
f[i + 1][1] = max(f[i][0] + val[2][i + 1], f[i][1] + val[1][i + 1]);
}
if(n > 1)
f[n][0] = max(f[n - 1][0] + val[1][n], f[n - 1][1] + val[0][n]);
// f[n][1] = max(f[n - 1][0] + val[1][n], f[n - 1][1] + val[0][n]);
printf("%d\n", f[n][0]);
}

  

Codeforces 358D DP的更多相关文章

  1. Codeforces 358D Dima and Hares:dp【只考虑相邻元素】

    题目链接:http://codeforces.com/problemset/problem/358/D 题意: 有n个物品A[i]摆成一排,你要按照某一个顺序将它们全部取走. 其中,取走A[i]的收益 ...

  2. Codeforces 358D【DP】

    思路:  dp[i][0] 代表取的时候左边没有 dp[i][1] 代表取的时候右边没有 dp[i][2] 代表取的时候左右都没有 dp[i][3] 代表取的时候左右都有 然后自己转移吧= =. 注意 ...

  3. Two Melodies CodeForces - 813D (DP,技巧)

    https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...

  4. Consecutive Subsequence CodeForces - 977F(dp)

    Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...

  5. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  6. Codeforces 721C [dp][拓扑排序]

    /* 题意:给你一个有向无环图.给一个限定t. 问从1点到n点,在不超过t的情况下,最多可以拜访几个点. 保证至少有一条路时限不超过t. 思路: 1.由无后向性我们可以知道(取决于该图是一个DAG), ...

  7. CodeForces 607C (DP) Hard problem

    题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...

  8. Codeforces 611d [DP][字符串]

    /* 题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字. 要求将整个字符串划分成严格递增的几个数字,并且不允许前导零. 思路: 1.很开心得发现,当我在前i个区间以后再加一个区间的时候 ...

  9. Codeforces 404D [DP]

    /* 我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的. 题意: 给你一个长度为1e6的由?*01 ...

随机推荐

  1. HTML基础iframe 实现聚合浏览器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. java ArrayList练习题

    package java06; /* *随机产生6的1——33的数字,并存储到列表中,再进行遍历 * */ import java.util.ArrayList; import java.util.R ...

  3. 【抓包工具之Fiddler】中session的请求/响应类型与图标对照表

  4. elasticsearch 进行聚合+去重查询

    转载:https://www.jianshu.com/p/c03c3c8bf583 以客户customer为例 我想查询每日的客户数. 先按照日期分桶,然后在桶内按照 姓名来去重 来计算客户数(实际会 ...

  5. Mongodb Capped Collection集合

    MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! ...

  6. centos在线安装mysql报错:file /etc/my.cnf conflicts between attempted installs of mysql-community-server-8.0.16-2.el7.x86_64 and MariaDB-common-10.4.6-1.el7.centos.x86_64

    错误提示:file /etc/my.cnf conflicts between attempted installs of mysql-community-server-8.0.16-2.el7.x8 ...

  7. Struts2基础-4 -struts拦截器

    Struts2拦截器工作原理 拦截器围绕着 Action和 Result的执行而执行. Struts2拦截器的工作方式如图10.2所示.从上图中可以看出, Struts2拦截器的实现原理和 Servl ...

  8. kafka-server.properties

    # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreement ...

  9. flutter页面布局三

    RaisedButton 为了实现今天的效果,在认识Wrap组件之前,先认识一下flutter中的按钮组件,Flutter 中通过 RaisedButton 定义一个按钮. import 'packa ...

  10. 网络协议之mDNS

    DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得 ...