DP
文章平均质量分 53
LeeBooL
这个作者很懒,什么都没留下…
展开
-
UVALive 6904
题意 : 有如下交通收费标准 1. 公交车 1每次,火车1每次,火车2每次 2.公交车火车之间换乘需要重新买票 3. 3可以买一张公交卡,有效期1天,无限次坐车,但是火车票要额外买4.3可以买一张公交卡,有效期1天,无限次坐车,但是火车票要额外买 4. 6一张坐车卡,有效期一天无限次坐乘火车公交车 5. 18有效期7天的公交卡,无限次,火车需要额外原创 2015-10-02 17:53:14 · 273 阅读 · 0 评论 -
POJ 3252
因为bit数组开小了神WA了无数遍#include #include #include #include using namespace std;int bit[33];int dp[32][32];void init(){ memset(dp, 0, sizeof(dp)); //dp[i][j] 长度为 i,原创 2015-01-18 17:21:59 · 290 阅读 · 0 评论 -
UVA 10617 区间DP
#include#include#define MAXN 65long long b[MAXN][MAXN];char s[MAXN];int n;void solve(){ int len = strlen(s); for(int i = 0; i b[i][i] = 1; for(int i = 1; i原创 2014-12-09 00:11:18 · 397 阅读 · 0 评论 -
uva 116 Unidirectional TSP
#include #include #include #include using namespace std;#define INF 0x1f1f1f1f#define LL long longLL dp[15][333];LL matrix[15][333];int path[15][333];#define min(a,b) (a) >原创 2014-12-06 21:19:17 · 315 阅读 · 0 评论 -
uva 531
#include #include #include #include #include using namespace std;char a[115][40];char b[115][40];int dp[115][115];int acnt, bcnt;bool flag = 0;void output( int i, int j){原创 2014-12-06 13:37:57 · 358 阅读 · 0 评论 -
Optimal Binary Search Tree
#include #include #include #include using namespace std;#define MAXN 300#define INF 0x1f1f1f1fint n;int f[MAXN];int dp[MAXN][MAXN];int sum[MAXN];void input(){ sum[0] = 0; for( int原创 2014-12-05 23:46:56 · 352 阅读 · 0 评论 -
UVA - 10626
记忆化搜索,不过要注意一句话As soon as I press the coke button (after having inserted sufficient amount of money), I receive a coke followed by the exchange (if any). 所以还有一种情况是先投入3个1 再投入一个10 ,这样找一个5原创 2014-12-04 14:47:11 · 329 阅读 · 0 评论 -
UVA 562
#include #include #include #include #include using namespace std;#define MAXN 1111int coin[MAXN];bool dp[111111];int main(){ int t; scanf("%d",&t); while(t--原创 2014-12-03 21:55:09 · 339 阅读 · 0 评论 -
uva 10131
paht[] 记录路径, 递归书写路径#include #include #include #include #include using namespace std;#define MAXN 1100struct node{ int w, iq, id; bool operator ( const node &a) const {原创 2014-12-03 21:30:30 · 288 阅读 · 0 评论 -
UVA 10271
根NOI的一道题有点像 那道题只是问你怎么选择可以使得每一对的差的平方和最小, 先要从小到大排序, 我们要选的话一定要选相邻的这样平方和一定最小 DP[i][j] 表示 从i个筷子中选择J对, dp[i][j] = min( dp[i-1] [j], dp[i-2][j-1] + (len[i-1] - len[i]) ^2)但是这个题要求 选三个, 从小到大排的话状态转移方程 就原创 2014-12-03 14:49:20 · 367 阅读 · 0 评论 -
UVA 10891
dp[i][j]-> 从I 到J 的 最大差值sum[i] 前I 项和; 经典DP 模型变形 如果不是连续的选(只从某一端选一个)的话 dp[i][j] = sum[j] - sum[ i -1] - min( dp[i] [j - 1] , dp[i+1] [j]) ; 随意连续的话就是枚举i~j内每一个dp[i][k] ( 注意要从两个方向)原创 2014-12-02 19:13:57 · 337 阅读 · 0 评论 -
poj 3071
概率问题f[i][j] -> 第I轮比赛J 胜出的概率然后递推的时候要注意判断下两个队是否能碰到一起#include #include #include #include #include using namespace std;#define eps 1e-10double pro[200][200];double f[10][200];原创 2015-02-05 14:11:43 · 314 阅读 · 0 评论 -
Eternal Reality
#include #include #include #include using namespace std;#define MAXN 111int a[111];int dp[111][111];int main(){ int n, l, x, y; while(scanf("%d %d %d %d",&l, &n, &x, &y原创 2015-02-06 23:45:49 · 372 阅读 · 0 评论 -
UVALive - 5842 Equipment
题意: 给出n个5元组,从中选出k组,使得这些组中5个位置,每个位置上最大数之和最大。分析: 想了好久…最后还是参考了别人的题解…一到DP必死无疑当 k > 5 的情况都好说了,都可以取到最大值; 艰难的是k < 5 的情况由于n的范围为1,10000,所以从n考虑是很难解出来的。 于是我们从5元组考虑。 每组5元组,最后可能被选择作为和的一部分,就是[11111],即[全部被选中做和原创 2015-08-15 14:04:33 · 567 阅读 · 0 评论 -
SPOJ MIXTURES
这道题是“石子合并”的变形。同样是用动态规划来解。 用 dp[i, j] 表示从第 i 堆开始的 j 堆混合物合并所释放的最少烟雾量 sum[i, j] 表示从第 i 堆开始的 j 堆混合物合并后的颜色。 然后就有 dp[i][j] = min(dp[i][k] + dp[i+k][j - k] + sum[i][k]*sum[i+k][j-k]); k from 1 to j原创 2015-07-18 19:36:07 · 323 阅读 · 0 评论 -
Road Improvement
#include #include #include #include #include using namespace std;#define LL long long#define MAXN 210000#define MOD 1000000007vector G[MAXN];vector permul[MAXN], aftmul[MAXN];原创 2015-05-25 20:56:44 · 273 阅读 · 0 评论 -
最少拦截系统
非递增子序列的个数#include#include#include#include#include#define INF 1010010101000#define ll long longusing namespace std;int n;int a[10100];int dp[10100];int main(){ while(cin>>n)原创 2015-04-03 23:20:38 · 251 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping!
#include #include #include #include using namespace std;#define MAXN 1111int main(){ int n; int num[MAXN]; int dp[MAXN]; while(scanf("%d", &n) != EOF && n) { for( i原创 2015-04-03 23:23:42 · 321 阅读 · 0 评论 -
HDU - 1176 免费的馅饼
dp[i][j] 为第I分钟在位置j所能获得的最多馅饼,根据题意我们可以知道, dp[i][j] = max(dp[i-1][j], max(dp[i-1][j+1],dp[i-1][j-1]) + num[i][j]; #include #include #include #include using namespace std;#define MAXN 1000原创 2015-04-03 23:23:00 · 336 阅读 · 0 评论 -
Max Sum Plus Plus
动态规划dp[i][j] 前j个数分成i段的最大值,包含i段那么 dp[i][j] = max(dp[i][j-1] , max(dp[1~i-1][j-1] ))+ num[j];我们可以再想一下,其实每次推出j个时我们只需要考虑的是j-1这一维度的数组,所以可以用滚动数组,或者直接开两个数组然后其实我们每次去更新dp[i][j]的时候,就可以去获取算dp[i+1][j+1] 所原创 2015-04-03 00:12:18 · 359 阅读 · 0 评论 -
Monkey and Banana
求最长递减子序列, 但是要注意的是,长方体六个面都可以#include #include #include #include #include using namespace std;#define MAXN 1000struct node{ int x, y, z;}sta[MAXN];int dp[MAXN];bool cmp(node a,n原创 2015-04-03 00:17:32 · 264 阅读 · 0 评论 -
Amr and Music
#include #include #include #include using namespace std;#define MAXN 1111int w[111];bool vis[111][MAXN];int dp[MAXN] , ans[111];int path[111][MAXN];int main(){ int n, k;原创 2015-01-24 11:17:46 · 365 阅读 · 0 评论 -
Mr. Kitayuta, the Treasure Hunter
#include #include #include using namespace std;#define MAXN 30100int dp[MAXN][510];int num[MAXN];int main(){ int n, m, val; while(scanf("%d %d", &n, &m) != EOF)原创 2015-01-19 22:35:20 · 461 阅读 · 0 评论 -
HDU COMPUTER
#include #include #include #include #include using namespace std;#define N 10011struct edge{ int to; int val;};int nodenum;vector E[N];int dis[N], ma原创 2014-10-29 17:48:03 · 349 阅读 · 0 评论 -
1520
#include #include #include #include using namespace std;#define N 6005struct edge{ int v; int next;} path[N int head[N], e, n;int dp[N][2], val[N], into[N];原创 2014-10-27 17:21:17 · 277 阅读 · 0 评论 -
区间DP
区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的dp,可以是二维的也可以是三维的,一般情况下为二维。然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左右两个区间合并到整个区间,或者说局部最优解合并为全局最优解,然后得解。 这类DP可以用常规的for循环来写,也可以用记忆化搜索来写,个人更倾向于记忆化搜索写法,因为这种写法相当易懂,要什么转载 2014-08-09 20:23:59 · 305 阅读 · 0 评论 -
CD 【dp+线路显示】
You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N minutes long. How原创 2014-03-24 19:08:00 · 411 阅读 · 0 评论 -
DP
http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将转载 2014-03-23 10:27:55 · 421 阅读 · 0 评论 -
DP
动态规划:从新手到专家March 26, 2013作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自T转载 2014-04-02 19:50:46 · 501 阅读 · 0 评论 -
剪枝算法
【摘要】本文讨论了搜索算法中“剪枝”这一常见的优化技巧.首先由回溯法解决迷宫问题展开论述,介绍了什么是剪枝;而后分析剪枝的三个原则正确、准确、高效,并分别就剪枝的两种思路:可行性剪枝及最优性剪枝,结合例题作进一步的阐述;最后对剪枝优化方法进行了一些总结. 【关键字】搜索、优化、剪枝、时间复杂度 引论在竞赛中,我们有时会碰到一些题目,它们既不能通过建立数学模型解决,又没有现成算法可转载 2014-03-23 10:26:16 · 7643 阅读 · 0 评论 -
DP
Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerful kingdom in the world. As a result, the people in this country are still very proud even if their n原创 2014-03-31 22:21:54 · 416 阅读 · 0 评论 -
HLG 选美大赛
选美大赛Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 407(107 users)Total Accepted: 99(80 users)Rating: Special Judge: NoDescription一年一度的哈理工选美大赛开始了.来自各个院系的N个美女们都在一起排成一排,然后从左到右给他们标号(1-N),评委叫兽原创 2014-03-28 20:29:00 · 432 阅读 · 0 评论 -
HLG 菜鸟和大牛
菜鸟和大牛Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 421(197 users)Total Accepted: 208(181 users)Rating: Special Judge: NoDescriptionblu原创 2014-03-28 18:46:16 · 836 阅读 · 0 评论 -
HLG Warcraft III
Warcraft IIITime Limit: 10000 MSMemory Limit: 65536 KTotal Submit: 412(118 users)Total Accepted: 159(103 users)Rating: Special Judge: NoDescription原创 2014-03-28 19:04:00 · 375 阅读 · 0 评论 -
背包
HDU 2639 背包第K优解 2011-11-27 21:28:41| 分类: ACM解题报告|举报|字号 订阅http://acm.hdu.edu.cn/showproblem.php?pid=2639Bone Collector IITime Limit: 5000/2000 MS (Java/Others) Memory Limi原创 2014-03-27 18:48:29 · 282 阅读 · 0 评论 -
UVA 674 coin change
#include #include #include #include #include using namespace std; #define maxn 6050 #define INF 99999999 #define LL long long #define mod 100000000000000000 LL dp[7500];原创 2014-03-27 19:15:42 · 320 阅读 · 0 评论 -
HDU2602
http://acm.hdu.edu.cn/showproblem.php?pid=2602#include #include #include using namespace std;int main(void){ int t,i,j; int n,V; int cost[1005],w[1005]; int dp[1005];原创 2014-03-24 19:25:54 · 712 阅读 · 0 评论 -
HDU2955
问题涉及概率知识,当他去抢银行时被抓的概率是每个银行被抓的概率之积,因为只要一家抓到他他就落网了,是“或”的关系。然而,逃跑的概率是“与”的关系,必须全部逃走才算逃走,否则被抓。问题将所有银行的钱作为背包,以各家银行的钱作为花费,f[i]为偷到i的钱没被抓的概率,还有初值的问题,当i为0时,他没偷不被抓的概率为1所以有以下代码成立:#include #include #incl原创 2014-03-25 19:02:45 · 499 阅读 · 0 评论 -
POJ1088
记忆化搜索+DP一直X到最低点的最长路径,切Y>X,则Y到最低点的最短路径就是Y->X+X到最低点的距离#include #include #include using namespace std;#define maxn 200 + 5int map[maxn][maxn];int dp[maxn][maxn];int原创 2014-05-21 19:52:57 · 377 阅读 · 0 评论 -
POJ1050
又了解了一种新思维,达拉拉~~~#include #include #include #define maxn 105using namespace std;int map[maxn][maxn];int n,maxs = 0;void find( int b){ int sum = 0; fo原创 2014-05-20 17:50:05 · 352 阅读 · 0 评论