经典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 ...
随机推荐
- tiled工具使用
转的 在这个分为上下两部分的教程中,我们将介绍如何使用Cocos2D-X和地图编辑器做一款基于地图块的游戏.在这个简单的地图块游戏里,一个精灵将在沙漠里搜寻它可口的西瓜! 在教程的第一部分,我们将介绍 ...
- html一般标签、常用标签、表格
body的属性: bgcolor 页面背景色 text 文字颜色 topmargin 上边距 leftmargi ...
- 学习笔记day5:inline inline-block block区别
1. block元素可以包含block元素和inline元素:但inline元素只能包含inline元素.要注意的是这个是个大概的说法,每个特定的元素能包含的元素也是特定的,所以具体到个别元素上,这条 ...
- Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace
Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace --去掉所有特殊字符,只剩字母 SELECT REGEXP ...
- golang文件上传和下载
[代码]golang 实现的文件服务(包括上传,下载的server端和client端) (2013-09-20 02:03:52) 转载▼ 标签: golang go 文件服务器 it 分类: GO相 ...
- Linux 系统时间查看 及 时区修改(自动同步时间)
1:使用date命令查看时区 [root@db-server ~]# date -R Sun, 11 Jan 2015 07:10:28 -0800 [root@db-server ~]# ...
- Webservice接口和Http接口
WebService又是一种高级应用,与之前学习的Struts.Spring.Hibernate等框架不同.WebService是面向服务的架构(SOA),看起来像是比SSH框架要大.那么它到底是做什 ...
- Excel 、数据库 一言不合就转换 (zhuan)
http://blog.csdn.net/marksinoberg/article/details/52280786 ***************************************** ...
- Sqlserver_left join 、right join、 inner join 用法
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- 激活MyEclipse 6.5方法-通过一段Java程序生成激活码
在MyEclipse中新建一个Java类,名为MyEclipseKeyGen,将下面的Java代码拷贝到MyEclipseKeyGen类中,先修改变量subscriber的值,然后运行程序即可获得Su ...