
DP
文章平均质量分 83
taozifish
http://www.daimayu.com/
展开
-
poj 2559 Largest Rectangle in a Histogram
//题意,给一堆相邻的长方形,求切割出的最大的矩形面积。//经典的dp#include#includeusing namespace std;const int maxn=100005;int l[maxn], r[maxn], h[maxn];原创 2011-08-02 13:09:53 · 343 阅读 · 0 评论 -
hdu 3351 Seinfeld / poj 3991 括号匹配2
题意:给出一个由'{' , '}' 组成的字符串,通过改变最少括号的方向使其匹配。思路:一开始用区间dp,TLE了,贪心才能过。贪心方法:从左向右遍历,遇到左括号lef++,遇到右括号,若lef>0,lef--,否则右括号变为左括号,ans++,lef++,最后再加上多下来的左括号,即lef/2。 先给出TLE代码:#include#include#include#inclu原创 2012-10-21 12:22:59 · 1390 阅读 · 0 评论 -
poj 1141 Brackets Sequence 括号匹配
题意:给出一个由'(' , ')' ,'[' , ']' 组成的字符串,通过增加最少括号使其匹配。解法:区间dp,记录下划分位置。PS:用while(scanf!=EOF)会WA #include#include#include#include#includeusing namespace std;const int maxn=105;char str[maxn];in原创 2012-10-21 12:16:52 · 595 阅读 · 0 评论 -
poj 2411 Mondriaan's Dream / hdu 1400
题意:用1*2的矩形拼成h*w的矩形,有多少种拼法?(h,w解法:状态压缩DP #include#include#include#include#includeusing namespace std;long long dp[2][2500], ans[15][15];int p2[15];int check(int x){ while(x){原创 2012-10-06 20:26:12 · 1137 阅读 · 0 评论 -
hdu 4293 Groups
dp,dp[i][j]为前j个人中,i+1到j为一组时,说真话的最大人数。注意预判同一组人数个数是否超出组内人数上限。 #include #include #include #include #include #include #include #include using namespace std;int n, ans;int a[505][505], dp[505原创 2012-09-16 17:52:23 · 2377 阅读 · 0 评论 -
poj 2923 Relocation 状态压缩
题意:给你n件货物的重量(n思路:货物数量很少,二进制记录状态,用背包预处理能一次运完的状态,再从初始全1状态开始bfs,到达全0状态结束。 #include#include#include#include#include#includeusing namespace std;int n, c1, c2, cas=1;int p2[12], c[12], flag[15原创 2012-10-02 15:16:56 · 640 阅读 · 0 评论 -
poj 1471 Triangles
dp,注意三角形朝向问题,每个位置的三角形只能朝一个特定的方向延伸。 #include#include#include#include#includeusing namespace std;const int maxn=105;int n, cas=1, empty[maxn][2*maxn]; //i行 j之前连续“-”数(包括j)char str[ma原创 2012-08-22 13:07:02 · 814 阅读 · 0 评论 -
poj 1947 Rebuilding Roads 树形dp加背包
dp[i][j]记录以i为根的树保留j个结点的费用。状态转移方程:dp[i][j]=min(dp[i][j], dp[i][j-k]+dp[s][k]-2) ,s为i的子结点,减2是i到s这条边分别在dp[i][j-k]和dp[s][k]中多删去了一次。 #include #include #include #include using namespace std;const原创 2012-08-20 11:19:34 · 429 阅读 · 0 评论 -
poj 1655 Balancing Act
简单树形dp状态转移方程: ans[i] = max(dp[j], n-dp[i]) j为i的所有子节点,dp[i]为以i为根的子树结点个数。 #include #include #include #include #include #define min(a,b) ((a)>(b)?(a):(b))using namespace std;const int maxn=原创 2012-08-19 15:16:02 · 407 阅读 · 0 评论 -
hdu 4341 Gold miner 分组背包
简单分组背包,同一斜率为一组。 #include #include #include #include #include using namespace std;double EP=1e-8;int n, T, vis[205], sum[205], cnt, dp[40005];struct node{ int x, y, t, v;}p[205];struc原创 2012-08-19 19:57:08 · 439 阅读 · 0 评论 -
hdu 4301 Divide Chocolate (多校联合1)
//题意:将2*n的长方形划分为k块,有多少种方法。最小单位为1*1的小矩形,且每块都不同。//解法:递推,状态转移种类比较多,需要考虑全面。 #include#include#include#includeusing namespace std;const long long M=100000007;long long n, k;long long dp[1005][2原创 2012-07-20 09:37:23 · 1008 阅读 · 0 评论 -
hdu 1081、poj1050 To The Max 最大子矩阵和
输入n*n的矩阵,求它的子矩阵,使和最大。最大子串和的加强版。#include#include#include#includeusing namespace std;int n, a[105][105], b[105];int max_sub(){ //求b数组的最大子串和 int i, res, sum[105]; for(i=1;原创 2012-05-06 15:37:38 · 567 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus 最大m子段和
由于数据很大,利用滚动数组。状态转移方程 dp[1][j]=max(dp[0][j-1]+a[j], dp[1][j-1]+a[j]);dp[0][j-1]表示a[1]到a[j-1]的i-1个子段的最大值,不一定包含a[j-1]。dp[1][j-1]表示a[1]到a[j-1]的i个子段的最大值,一定包含a[j-1]。dp[1][i]表示a[1]到a[j]的i个子段的最大值,一定包含原创 2012-04-08 22:09:40 · 463 阅读 · 0 评论 -
Codeforces Round #146 (Div. 2) D. Let's Play Osu! comb数平方和的数学期望
题目:D. Let's Play Osu!time limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou're playing a game called Osu! Here's a simplified ver原创 2012-10-21 17:13:57 · 2286 阅读 · 8 评论