HDU 1024  Max Sum Plus Plus

// dp[i][j] = max(dp[i][j-1], dp[i-1][t]) + num[j]
// pre[j-1] 存放dp[i-1][t] 里的 (1<=t<=j-1)最大值。
//dp[j] = max(dp[j-1], pre[j-1]) + num[j]; #include <stdio.h>
#include <string.h>
#include <iostream>
#define inf 100000000
#define maxn 1000010
using namespace std; int pre[maxn];
int num[maxn];
int dp[maxn]; int main() {
//freopen("in.cpp", "r", stdin);
int m, n;
while(~scanf("%d%d", &m, &n)) {
for (int i=1; i<=n; ++i)
scanf("%d", &num[i]); pre[0] = 0;
dp[0] = 0;
memset(pre, 0, sizeof(pre)); int maxx = -inf;
for (int i=1; i<=m; ++i) {
maxx = -inf;
for (int j=i; j<=n; ++j) {
dp[j] = max(dp[j-1], pre[j-1]) + num[j];
//pre[j-1] = max(dp[j-1], pre[j-2]);
pre[j-1] = maxx;
maxx = max(maxx, dp[j]);
}
}
printf("%d\n", maxx);
}
return 0;
}

POJ 1322 Chocolate

二维:

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std; double dp[10010][210]; bool judge(int n, int m, int k) {
if (m > n || m > k) return false;
if ((m+n)%2) return false;
return true;
} int main() {
int k, n, m;
// freopen("in.cpp", "r", stdin);
while (~scanf("%d", &k) && k) {
scanf("%d%d", &n, &m); if (judge(n, m, k) == false) {
printf("0.000\n");
continue;
} if (n>10000) {
if (n%2) n = 10003;
else n = 10004;
}
memset(dp, 0, sizeof(dp));
dp[0][0] = 1; for (int i=1; i<=n; ++i) {
for (int j=0; j<=i && j<=k; ++j) {
if ((i+j)%2) continue;
if(j>0) dp[i][j] += dp[i-1][j-1]*(1-(j-1)*1.0/k);
if(j<k) dp[i][j] += dp[i-1][j+1]*(1.0*(j+1)/k);
}
} printf("%.3f\n", dp[n][m]);
}
return 0;
}

一维:

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std; double dp[1000010];
double pre[1000010]; bool judge(int n, int m, int k) {
if (m > n || m > k) return false;
if ((m+n)%2) return false;
return true;
} int main() {
int k, n, m;
//freopen("in.cpp", "r", stdin);
while (~scanf("%d", &k) && k) {
scanf("%d%d", &n, &m); if (judge(n, m, k) == false) {
printf("0.000\n");
continue;
} if (n>10000) {
if (n%2) n = 10003;
else n = 10004;
}
memset(dp, 0, sizeof(dp));
memset(pre, 0, sizeof(pre));
pre[0] = 1; for (int i=1; i<=n; ++i) {
//memset(dp, 0, sizeof(dp));
for (int j=0; j<=i && j<=k; ++j) {
dp[j] = 0;
if ((i+j)%2) continue;
if(j>0) dp[j] += pre[j-1]*(1-(j-1)*1.0/k);
if(j<k) dp[j] += pre[j+1]*(1.0*(j+1)/k);
}
for (int j=0; j<=i && j<=k; ++j) {
pre[j] = dp[j];
}
} printf("%.3f\n", pre[m]);
}
return 0;
}

经典DP 二维换一维的更多相关文章

  1. Max Sum Plus Plus HDU - 1024 基础dp 二维变一维的过程,有点难想

    /* dp[i][j]=max(dp[i][j-1]+a[j],max(dp[i-1][k])+a[j]) (0<k<j) dp[i][j-1]+a[j]表示的是前j-1分成i组,第j个必 ...

  2. php 二维转一维

    Array(    [0] => Array        (            [salesorderid] => 10001            [createdtime] =& ...

  3. Win10 UWP开发:摄像头扫描二维码/一维码功能

    这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobi ...

  4. 三维码 & 二维码 & 一维码

    三维码 & 二维码 & 一维码 3D, 2D, 1D 防伪国家标准 -<结构三维码防伪技术条件> http://www.xinhuanet.com/tech/2019-12 ...

  5. AcWing 156. 矩阵 (哈希二维转一维查询)打卡

    给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过. 输入格式 第一行四个整数M,N,A,B. 接下来一个M行N列的 ...

  6. 洛谷P1719 最大加权矩形 (DP/二维前缀和)

    题目描述也没啥好说的,就是给你个你n*n的矩形(带权),求其中最大权值的子矩阵. 首先比较好想的就是二维前缀和,n<=120,所以可以用暴力. 1 #include<bits/stdc++ ...

  7. HDU 2159 FATE (DP 二维费用背包)

    题目链接 题意 : 中文题不详述. 思路 : 二维背包,dp[i][h]表示当前忍耐值为i的情况下,杀了h个怪得到的最大经验值,状态转移方程: dp[i][h] = max(dp[i][h],dp[i ...

  8. hdu 1081 To The Max(dp+化二维为一维)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081 To The Max Time Limit: 2000/1000 MS (Java/Others ...

  9. hdu6078 Wavel Sequence dp+二维树状数组

    //#pragma comment(linker, "/STACK:102400000,102400000") /** 题目:hdu6078 Wavel Sequence 链接:h ...

随机推荐

  1. elcipse 安装svn插件 转载

    1.下载最新的Eclipse,我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版    如果没有安装的请到这里下载安装:http://ecli ...

  2. 大学生学习编程(PHP)

    在v2ex上看到一大三的求职实习,然后有人给出了建议,个人觉得也挺好,做个记录./  原帖地址 @ARjson问: 大三的学生党,求实习岗位,现居北京.后端PHP一年半开发经验,熟悉speedphp, ...

  3. 老笔记本_Win7_U盘_ReadyBoost

    老笔记本 Win7 U盘 ReadyBoost 值得尝试

  4. OCR识别-python版(一)

    需求:识别图片中的文字信息环境:windows系统 开发语言:python 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.pyocr 网络通直接使用命令:pip ...

  5. bootstrap学习笔记<六>(表单二之按钮)

    按钮(补充) (ps:居中元素可以使用<center></center>标签) 块级按钮(ps:按钮占一整行) <button class="btn btn-p ...

  6. poj1039Pipe(直线交点、叉积)

    链接 之前刷poj计划时刷过,不过也没什么印象了.打铁还是趁热,还没热起来就放弃了,前面算是做了无用功,有如胡乱的看解题报告一样. 题目应该是比较经典的集合入门题,黑书上有一部分核心讲解. 题目中的最 ...

  7. 关于json 的那些知识点

    深入理解JSON对象 前面的话 json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据 ...

  8. 使用bufferevent进行libevent服务端和客户端的开发

    参考了网上的一些例子,实验了基于bufferevent的开发. 首先是服务端: #include <netinet/in.h> #include <sys/socket.h> ...

  9. velocity基础教程--1.标准使用(zhuan)

    http://llying.iteye.com/blog/387253 **************************** velocity是一个非常好用的模板引擎 这里不对项目进行详细介绍,可 ...

  10. SDL2.0的VS开发环境搭建

    SDL2.0的VS开发环境搭建 [前言] 我是用的是VS2012,VS的版本应该大致一样. [开发环境搭建] >>>SDL2.0开发环境配置:1.从www.libsdl.org 下载 ...