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. Maven常用命令(转)

    Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...

  2. php获取在线xml的数据

    因为连接百度地图的API,然后通过经纬度得到位置信息,可是得到的位置信息是通过将经纬度嵌在url里面,生成xml文件后,因为是在线的,当时就想到在不下载的情况下获取里面的数据,因为使用代码下载是可以下 ...

  3. Dijkstra(迪杰斯特拉)源最短路径 小白说明

    源最短路径 小白说明 Dijkstra算法,书上其实说的很简洁,仔细看,仔细思考是会理解的.但要先理解几条引论和推理. 而自己思考的思路在不需要任何推理只从贪心思路出发,和Dijkstra有所不同,但 ...

  4. eclispse 中集成多个tomcat

    1.背景 在本地需要运行两个项目进行测试时,需要同时启动两个服务器,所以集成多个Tomcat到eclipse就成为一个必要的知识点. 2.准备知识 2.1 因为同时在一台主机上运行,所以多个服务器共用 ...

  5. mysql 大数据量求平均值

    需求是:对于一个设备,求一天内每个小时的平均值,一个月内每天的平均值,更通用的需求是,从起始时间到结束时间,每隔一段时间,求一个平均值.目前的解决策略是:在存储过程中进行处理,从起始时间到结束时间,切 ...

  6. Android 设置进度条背景

    Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...

  7. PHP 用文件流方式展示图片

    public function index(){ $img = 'http://img.pf.loc/static/images/2016/05/24/21d98edf98bd6c30afe1c838 ...

  8. lx:这么空!什么叫假大空 xy:那我做给你看

    “如果我答应你,你回来了XY,最后没有在一起肯定会怪我:而且我现在没有想好以后会怎么样” 希望你可以看到我的努力!PS : 坚持以后每日至少一篇.编程是一门手艺,手艺人靠手艺养家! ---手艺人

  9. ie、火狐、谷歌浏览器,光标定位问题

    IE:不管该行有没有文字,光标高度与font-size一致. FF:该行有文字时,光标高度与font-size一致.该行无文字时,光标高度与input的height一致. Chrome:该行无文字时, ...

  10. php imagecreatetruecolor输出字符符或验证码

    $img = imagecreatetruecolor(100,100); //创建真彩图像资源 $color = imagecolorAllocate($img,200,200,200); //分配 ...