[CODE【VS】]江哥的DP题a
来源:互联网 发布:java专业技能 编辑:程序博客网 时间:2024/06/05 01:00
原题
先来一波江哥的解题报告杀
这种方法十分的高深莫测,所以我们换一个容易理解的:
f(i,j)表示前i个选j个,且第i个必选,那么就是江哥的转移方程P.S:但是不会前缀和优化!
显然,这样的方法只能获得30分,数据十分的坑,那么优化如下:
f(i,j,0)表示前i个里面选j个且第i个不选f(i,j,1)表示前i个里面选j个且第j个选f(i,j,0)=max{f(i-1,j,0),f(i-1,j,1)};//强调,一定要取max,不然会爆0f(i,j,1)=f(i-1,j-1,0)+a[i];//这里为了优化,表示第i-1个不选的最大的分,然后累加就可以了答案存储在max{f(n,m,1),f(n,m,0)}中
所以瞬间AC,算法效率n^2;
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;const int Inf=1000000000+10;long long a[1010],f[1010][1010][2];int main(){ freopen("a.in","r",stdin); freopen("a.out","w",stdout); int i,j,k,n,m; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)scanf("%lld",&a[i]); f[1][1][1]=a[1]; for(i=2;i<=n;i++) for(j=1;j<=m;j++){ f[i][j][0]=max(f[i-1][j][1],f[i-1][j][0]); f[i][j][1]=a[i]+f[i-1][j-1][0]; } printf("%lld\n",max(f[n][m][0],f[n][m][1])); return 0;}
阅读全文
0 0
- [CODE【VS】]江哥的DP题a
- [CODE【VS】]江哥的DP题b
- [CODE【VS】]江哥的DP题d
- code【vs】1380 没有上司的舞会(树形dp)
- VS Code的快捷键
- 【CODE VS】P1695 windows 2013(DP)
- code vs 1029 遍历问题 区间dp
- code vs 1378 选课(树形DP)
- 假期 code[vs]3622 dp+单调队列
- code vs 1520 回文字符串 (dp)
- code vs 1711 棋盘分割 (dp)
- code vs 1315 摆花 (dp)
- code(vs) 1154 能量项链 (区间dp)
- code(vs)1010 过河卒 (棋盘dp)
- code(vs)1219 骑士游历 (棋盘dp)
- code(vs)1220 数字三角形(普通dp)
- 区间DP code[vs]1258 关路灯
- CODE[VS] 1105 过河 状态压缩DP
- iOS推送配置手把手指南
- 第四单元笔记整理
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- jquery控制上传文件格式、大小以及图片预览功能
- python爬取拉勾网数据保存到mysql数据库
- [CODE【VS】]江哥的DP题a
- java递归生成树
- 全面理解面向对象的 JavaScript
- SPFA模板
- 51nod 1053 最大M子段和 V2 (链表 对经典dp进行优化)
- 架构模式(Architectural Pattern)、设计模式(Design Pattern)、代码模式(Coding Pattern)
- LeetCode[526]Beautiful Arrangement(Java)
- Delphi ControlState和ControlStyle属性详解
- ElasticSearch搜索服务器-安装入门