经典DP 二维换一维
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 二维换一维的更多相关文章
- 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个必 ...
- php 二维转一维
Array( [0] => Array ( [salesorderid] => 10001 [createdtime] =& ...
- Win10 UWP开发:摄像头扫描二维码/一维码功能
这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobi ...
- 三维码 & 二维码 & 一维码
三维码 & 二维码 & 一维码 3D, 2D, 1D 防伪国家标准 -<结构三维码防伪技术条件> http://www.xinhuanet.com/tech/2019-12 ...
- AcWing 156. 矩阵 (哈希二维转一维查询)打卡
给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过. 输入格式 第一行四个整数M,N,A,B. 接下来一个M行N列的 ...
- 洛谷P1719 最大加权矩形 (DP/二维前缀和)
题目描述也没啥好说的,就是给你个你n*n的矩形(带权),求其中最大权值的子矩阵. 首先比较好想的就是二维前缀和,n<=120,所以可以用暴力. 1 #include<bits/stdc++ ...
- HDU 2159 FATE (DP 二维费用背包)
题目链接 题意 : 中文题不详述. 思路 : 二维背包,dp[i][h]表示当前忍耐值为i的情况下,杀了h个怪得到的最大经验值,状态转移方程: dp[i][h] = max(dp[i][h],dp[i ...
- 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 ...
- hdu6078 Wavel Sequence dp+二维树状数组
//#pragma comment(linker, "/STACK:102400000,102400000") /** 题目:hdu6078 Wavel Sequence 链接:h ...
随机推荐
- 转 cocos2dx内存优化 (之二)
一.cocos2dx之如何优化内存使用(高级篇) 本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道 ...
- 2013/7/16 HNU_训练赛4
CF328B Sheldon and Ice Pieces 题意:给定一个数字序列,问后面的数字元素能够组成最多的组数. 分析:把2和5,6和9看作是一个元素,然后求出一个最小的组数就可以了. #in ...
- 九度-剑指Offer
二维数组中的查找 分析:既然已经给定了每一行从左至右递增,那么对于每一行直接二分查找即可,一开始还想着每一列同样查找一次,后来发现每一行查找一遍就能够遍历所有的元素了. #include <cs ...
- Python学习(2)基本语法
目录 交互式编程 脚本式编程 Python 标识符 Python保留字符 行和缩进 多行语句 Python 引号 Python注释 Python空行 python的输入和输出 命令行参数 交互式编程 ...
- Java中的数学运算BigDecimal
Math类 package ch7; /** * Created by Jiqing on 2016/11/24. */ public class MathDemo { public static v ...
- hostapd源代码分析(三):管理帧的收发和处理
hostapd源代码分析(三):管理帧的收发和处理 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004379 这篇文章我来讲解一下h ...
- uva 11324 The Largest Clique
vjudge 上题目链接:uva 11324 scc + dp,根据大白书上的思路:" 同一个强连通分量中的点要么都选,要么不选.把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它 ...
- PyQt 学习笔记1——自定义窗口框架
自定义一个属于自己的窗口,初始化时自动设置好在屏幕中央显示,重写退出事件的触发器 closeEvent(),并增加了设置图标,简化设置标题的函数名,其它类可以继承它: # -*- coding: ut ...
- Android是如何绘制View的
当一个activity获得焦点时, 它会被要求绘制它的布局. Android框架将处理绘制的过程, 但是activity必须提供它的布局体系的根节点. 绘制将从根节点开始, 根节点被要求测量和绘制布局 ...
- 使用soapui调用webservice接口
soapui是专门模拟调用webservice接口的工具,下面介绍下怎么使用: 1.下载soapui并安装: 2.以免费天气获取接口为例:http://www.webservicex.net/glob ...