DP整理

1.Likecloud-吃、吃、吃

(做过最水的DP题)

大意:求最优树状路径

Code:

 1 #include <iostream>
 2 #include <cstdio>
 3 #define ll long long
 4 using namespace std;
 5 const int maxn=210;
 6 ll n,m,a[maxn][maxn],f[maxn][maxn];
 7 inline ll max(ll a,ll b)
 8 {
 9     return a>b?a:b;
10 }
11 inline void read(ll &k)
12 {
13     ll f=1;char c=getchar();k=0;
14     while (c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar();
15     while (c>=‘0‘&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar();
16     k*=f;
17 }
18 int main()
19 {
20     read(m);read(n);
21     for (int i=1;i<=m;i++)
22     for (int j=1;j<=n;j++)
23     read(a[i][j]);
24     for (int i=1;i<=n;i++)f[1][i]=a[1][i];
25     for (int i=2;i<=m;i++)
26     for (int j=1;j<=n;j++)
27     f[i][j]=max(max(f[i-1][j],f[i-1][j-1]),f[i-1][j+1])+a[i][j];
28     printf("%lld\n",max(max(f[m][n>>1],f[m][(n>>1)+1]),f[m][(n>>1)+2]));
29 }

时间: 2024-12-26 03:26:51

DP整理的相关文章

数位dp整理

1.CodeForces 55DBeautiful numbers 题目大意:一个数是幸运数当且仅当这个数能整除所有位数,求[a,b]有多少幸运数 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxa = 20; const int mod = 2520; long long dp[maxa][1<<8][mod]; #defin

【转】斜率优化DP和四边形不等式优化DP整理

当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重循环跑状态 i,一重循环跑 i 的所有子状态)这样的时间复杂度是O(N^2)而 斜率优化或者四边形不等式优化后的DP 可以将时间复杂度缩减到O(N) O(N^2)可以优化到O(N) ,O(N^3)可以优化到O(N^2),依次类推 斜率优化DP和四边形不等式优化DP主要的原理就是利用斜率或者四边形不等式等数学方法 在所有要判断的子状态中迅速做出判断,所以这里的优化其实是省去了枚举

背包DP整理

01背包例题: 题目:传送门 /*给你n种不同的物品,每个物品有自己的体积w[i]和价值v[i],如果每个物品只能拿一次,给你容量为m的背包,怎样才能获取最大价值:主线:使容量为m的背包装入的物品价值最大:dp[j] 记录当容量为j时的可行取法的最大价值状态转移方程:dp[j]=max(  dp[j],  dp[j-w[i]] +v[i]]  );  */ 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e3

经典的动态规划

有一个动态规划100例...看到机房里shenben的复习资料...加上垃圾的dp....整理一下. 一.资源分配问题 tyvj 1203 机器分配 题目大意:有m个设备,n个公司,v[i][j]表示第i个公司分j个设备的贡献值.怎样分配使贡献值的和最大? 状态:前i个公司分j个设备. f[i][j]表示前i个公司分j个设备,枚举第i个公司分k个设备. 状态转移方程:f[i][j]=max{f[i-1][j-k]+v[i][k]} 这个还挺简单的. 洛谷P2736 "破锣摇滚"乐队 R

nyoj 1216——整理图书 CF 229D—— Towers——————【dp+贪心】

整理图书 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 小明是图书鹳狸猿,他有很多很多的书堆在了一起摆在了架子上,每摞书是横着放的,而且每摞书是订好的 是一个整体,不可分开,(可以想象架子是一条直线),但是这些书高度却参差不齐,小明有强迫症,看不得不整齐 所以他想让这些书的高度形成一个非降序列他才舒心,可是这些书是有序的,所以他只能把其中的一摞书和他相邻的书装订在一起 形成一摞新的书,那么他最少的装订次数是多少呢 输入 多组测试数据,处理到文件结束每组数据开始有一

·DP」知识点整理

一.最长公共子序列(LCS Longest Common  Subsequence) 第一,先说区别,最长公共子串和最长公共子序列是不一样的. 最长公共子串不许是连续的,而最长公共子序列可以是不联系的. 网络上解释的子序列: 一个字符串S,去掉零个或者多个元素所剩下的子串称为S的子序列.最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的. 例如 X=ABCBDAB Y=BDCABA BCA是X和Y的一个公共子序列,但是不是X和Y的最长公共子序列,

数位dp知识点整理

题解报告:hdu 2089 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众.不吉利的数字为所有含有4或62的号码.例如:62315 73418 88914都属于不吉利号码.但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列.你的任务是,对于每次给出的一个牌照

[luoguP1103] 书本整理(DP)

传送门 以 去掉多少个 为阶段不好做. 去掉 k 个也可以变成选 n - k 个 f[i][j] 表示前 i 个数中 选 j 个的最优解,a[i] 必选 f[i][j] = min(f[i][j], f[k][j - 1] + abs(b[k] - b[i])) (2 <= j <= min(i, n - m), j - 1 <= k < i) ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include

夏令营讲课内容整理 Day 5.

DP专场.. 动态规划是运筹学的一个分支, 求解决策过程最优化的数学方法. 我们一般把动态规划简称为DP(Dynamic Programming) 1.动态规划的背包问题 有一个容量为m的背包,有n个物品,每一个物品i的重量为w[i],价值为v[i]. 要求选择一些物品放入背包中,每种物品只能最多使用一次,使得在不超重的情况下让背包中所有物品价值总和最大. 正常向解法:设状态数组f[i][j]为把前i个物品放入一个容量为j的背包中所能获得的最大价值(以下同设),则状态转移方程为: f[i][j]