题目:http://poj.org/problem?id=2228 dp[i][j][0/1]表示前i小时中第j小时睡(1)或不睡(0)的最优值; 注意第一个小时,若睡则对最终取结果有要求,即第n个小时必须睡,所以据此DP两遍; 可以开滚动数组,否则容易MLE。 代码如下: ...
分类:
其他好文 时间:
2018-03-20 00:44:58
阅读次数:
184
题目:http://www.joyoi.cn/problem/tyvj-1061 DP记录状态为当前任务时不在此任务位置上的两个人的位置(因为一定有一个人在此任务位置上); 不妨设初始位置p[0]=3,另外两个人在1,2位置上; 每次考虑上一任务的哪个人来到这一任务位置,更新; 开滚动数组以防止爆空 ...
分类:
移动开发 时间:
2018-03-15 14:21:00
阅读次数:
219
题意:商品总价按四舍五入计算,n个物品最多可分$d+1$段,求最小代价 $dp[i][j]$:$j$个物品分$i$段 注意一个技巧是只在需要分出新的段时才四舍五入(旧段结算),这样就避免了不知道分段具体位置无法$dp$的情况 数据量比较小就不使用滚动数组了 ...
分类:
其他好文 时间:
2018-03-08 14:04:20
阅读次数:
169
#include<bits/stdc++.h> using namespace std; int dp[1005];//滚动数组的写法,省下空间省不去时间 int weight[1005]; int value[1005]; int main() { int n,m; cin>>m>>n; mems ...
分类:
其他好文 时间:
2018-03-06 21:40:45
阅读次数:
155
题解: 第一问二分答案 第二问用f[i][j]表示前i块分成j段的方案数 但是MLE 于是改变枚举顺序 先枚举j,然后i这一层用滚动数组优化 f[i][j]=sigma f[k][j-1](sum[i]-sum[k]<=ans) 决策是一段区间,而且左端点单调,搞个指针维护最左的决策点 ...
分类:
其他好文 时间:
2018-03-04 10:32:15
阅读次数:
112
题解:斜率优化,维护上凸包,类似右上半圆 滚动数组优化空间,DP时记录决策点 注意:注意sum[i]-sum[j]可能==0 出题人就给了32分QWQ 其实本代码有Bug但是数据没卡 对于直接把0元素去掉然后DP可能使得序列不足m ...
Max Sum Plus Plus 题意:题意理解了老半天,这里是说在给定数列中,取m组子数列,不能有重复,使得这些子序列的和最大; 就比如m=2时候,1 /2/-4/5/6.可以不用拿-4的意思; 思路:这道题的思路是动态规划,递推; 状态dp[i][j] 表示有前j个数,组成i组的和的最大值。 ...
分类:
编程语言 时间:
2018-02-25 00:12:17
阅读次数:
142
URAL - 1017 状态:dp[i][j]表示和为i最大数小于等于j的方案数 初始状态:dp[0][0]=1 状态转移:dp[i][j]=dp[i-j][j-1]+dp[i][j-1],i>=j 第二维可以用滚动数组消掉 最后减去和为n最大值也为n的情况,因为这种不满足条件 代码: ...
分类:
其他好文 时间:
2018-01-26 12:42:43
阅读次数:
72
dp模拟即可。 d[i][j][k]表示使用前i种面值,1号手里钱为j,2号手里钱为k时最少操作数 使用滚动数组压缩空间 ...
分类:
其他好文 时间:
2018-01-19 22:20:27
阅读次数:
160
每层至少一个,滚动时要判上一层非法与否,所以每次都要memset C++ include define rep(i,j,k) for(int i=j;i=k;i ) define scan(a) scanf("%d",&a) using namespace std; const int maxn = ...
分类:
编程语言 时间:
2018-01-15 14:51:48
阅读次数:
156