SGU 183. Painting the balls( dp )】的更多相关文章

dp..dp(i, j)表示画两个点为i-j, i的最优答案. dp(i, j) = min{ dp(i-j, k) } + cost[i] (1≤k≤M-j) 令f(i, j) = min{dp(i, j)}, 那么转移时间下降为O(1).然后滚动数组..这道题卡空间..时间复杂度O(NM) -------------------------------------------------------------------------------- #include<cstdio> #in…
183. Painting the balls time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard inputoutput: standard output Petya puts the N white balls in a line and now he wants to paint some of them in black, so that at least two black balls…
题意:给n个白球,选其中一些涂为黑色,且给了涂第i个球的花费为ci,要求每m个连续的球中至少有两个黑球,问最小花费是多少? 容易想到一个方程dp[i][j]=min{dp[k][i]}+c[j] dp[i][j]表示最后上色的两个球分别是第i和第j个球(i<j)时的最优解. 我们从条件每m个连续的球中至少有两个黑球可以得出k的范围j-m<=k<i 如果我们直接按上面这个方程去做的话时间复杂度是O(n*m*m). #include <iostream> #include <…
时间限制:0.25s 空间限制:4M 题意:  在n(n<=10000)个球中,给若干个球涂色,每个球涂色的代价为Ci,使得任意连续m(m<=100)个球中有至少两个球被涂了色. Solution: 首先很直接地能想到一个DP的状态转移方程 f[i][j] 代表,当前涂第i个球,且前面最近一个被涂色的球为j的最小代价 f[i][j]=min(f[j][k])+Ci,   k>i+1-m 分析这个转移方程的时间复杂度是O(n*m*m)在此题的数据范围中高达10^8 显然我们需要更好的解法…
一个比较经典的题型,两次DFS求树上每个点的最远端距离. 参考这里:http://hi.baidu.com/oi_pkqs90/item/914e951c41e7d0ccbf904252 dp[i][0]表示最远端在以 i 为根的子树中的最长长度,dp[i][1]记录最远端在以i为根的子树中的次长长度,dp[i][2]表示最远端不在以 i 为根的子树中的最长长度. 答案即为max( dp[i][0], dp[i][2] ); dp[i][0]和dp[i][1]可以通过一次DFS得到. 再看dp[…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5048 Sample Input 4 3 Sample Output 3 题目大意:n个格子排成一条直线,可以选择涂成红色或蓝色,问最少 m 个连续为红色的方案数. 分析:递推法 dp[i] 表示前 i 个最少 m 个连续为红色的方案数. 转移时,分类讨论: 1.前 i-1 个已经满足这个性质,那么,第 i 个随意涂色,方案数为 dp[i-1] * 2 . 2.前 i…
题目大意:给N块板, 有A,B2种类型的板, 要求任意M块连续的板中至少有K块B板.1≤n≤60,1≤m≤15,0≤k≤m≤n. dp(x, s)表示第x块板, x前M块板的状态为s, 然后合法状态转移就行了. --------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>…
题目大意:给N个点,求每个点的与其他点距离最大值 很经典的树形dp...很久前就想写来着...看了陈老师的code才会的...mx[x][0], mx[x][1]分别表示x点子树里最长的2个距离, dfs一遍得到. mx[x][2]表示从x的父亲到x的最长路径长度, 也是dfs一遍得到(具体看代码).最后答案就是max(mx[x][0], mx[x][2]). 时间复杂度O(N) ----------------------------------------------------------…
题意大概是:给出N个硬币, 面值为a_i, 问要凑成X元哪些硬币是不可或缺的.1 ≤ N ≤ 200, 1 ≤ x ≤ 10^4 直接枚举, 然后就是01背包了. 为了不让复杂度多乘个N, 我们就从左往右, 从右往左分别dp一次.这样判断一个硬币就是O(X).总时间复杂度O(NX) ----------------------------------------------------------------------------- #include<bits/stdc++.h>   usi…
Description Petya puts the \(N\) white balls in a line and now he wants to paint some of them in black, so that at least two black balls could be found among any \(M\) successive balls. Petya knows that he needs \(C_i\) milliliters of dye exactly to…