dp
superpig101
一只特立独行的猪
展开
-
hdu 1950
1.学习了最长上升子序列nlogn算法在川大oj上遇到一道题无法用n^2过于是,各种纠结,最后习得nlogn的算法最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS。排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了。假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。原创 2013-08-20 11:20:56 · 544 阅读 · 0 评论 -
uva10285
#include #include #include using namespace std;const int maxn = 110;int row,col;int map[maxn][maxn];int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};int res[maxn][maxn];int research(int r,原创 2013-08-25 09:48:58 · 564 阅读 · 0 评论 -
hdu 1114
完全背包简单题.#include #include #include #include #define inf (1 << 30)using namespace std;const int maxn = 10000;int dp[maxn];int val[510],weit[510];int main(){ int cas; sca原创 2013-08-22 22:10:57 · 647 阅读 · 0 评论 -
hdu 3496
初始化的细节问题我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。如果并没有要求必须把背原创 2013-08-22 15:28:28 · 600 阅读 · 0 评论 -
uva 10465
完全背包问题,只是物品只有两件既吃汉堡包的时间,容量为总时间t,每个物品的价值为1.#include #include #include using namespace std;const int maxn = 10010;int dp[maxn];int main(){ int t,p[3]; while(~scanf("%d %d %d",&p[原创 2013-08-22 17:24:32 · 598 阅读 · 0 评论 -
背包问题
01背包问题描述:01背包(ZeroOnePack):有N件物品和一个容量为V的背包,每种物品均只有一件。且每i件物品的重量为weight[i],价值为value[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。 背包特点:每种物品仅有一件,可以选择放或不放。 基本思路:用子问题定义状态:即DP[i][v]表示前i件物品恰好放入容量转载 2013-08-22 10:38:24 · 631 阅读 · 0 评论 -
uva 357
#include #include #include const int maxn = 30010;using namespace std;int cent[6]={0,1,5,10,25,50};long long dp[maxn];int main(){ int n; while(~scanf("%d",&n)){ for原创 2013-08-21 19:40:55 · 695 阅读 · 0 评论 -
poj 2576
背包问题,二维的dp.#include #include #include using namespace std;const int maxn = 110;const int maxw = 45010;int num[maxn];bool dp[maxn][maxw];int main(){ int m; while(~scanf("%d",&m)){原创 2013-08-21 14:50:10 · 657 阅读 · 0 评论 -
uva 10192
又是一道水题,最长公共子序列。#include #include #include #include using namespace std;const int maxn = 110;int dp[maxn][maxn];int main(){ string str1,str2; int cas = 1; while(getline原创 2013-08-21 18:49:18 · 517 阅读 · 0 评论 -
uva 10130
01背包问题,开始有点犹豫能不能拿同一样物品,觉得有点复杂。后来发现可以拿同一件物。#include #include #include using namespace std;const int maxn = 1010;int w[maxn],val[maxn],dp[maxn];int g[105];int main(){ int cas;原创 2013-08-21 17:18:20 · 522 阅读 · 0 评论 -
uva 10066
简单的模板题,最长公子序列。#include #include #include #include using namespace std;const int maxn = 105;int dp[maxn][maxn];int a[maxn],b[maxn];int main(){ int cas = 1; int n1,n2;原创 2013-08-21 15:28:35 · 679 阅读 · 0 评论 -
uva 562
01背包问题,列举所有的分配可能,然后求两人钱相差最少的值。 #include #include #include using namespace std;const int maxn = 105;const int maxm = 50005;bool dp[maxm];int cent[maxn];int main(){ int cas;原创 2013-08-21 10:39:58 · 685 阅读 · 0 评论 -
uva 10131
题意:给你许多大象的体重和IQ值,证明大象越重,智商越高的结论是错误的.把大象的体重按照升序排列,然后找IQ序列中的最长递减序列.#include #include #include #include #include using namespace std;const int maxn = 1010;struct pnt{ int wet;//体重原创 2013-08-20 23:57:04 · 494 阅读 · 0 评论 -
uva 674
状态方程为dp[j] = dp[j] + dp[j -cent[i]];#include #include const int maxn = 7500;using namespace std;int dp[maxn];int cent[6] = {0,1,5,10,25,50};int main(){ int n; while(~scanf(原创 2013-08-20 13:59:12 · 781 阅读 · 0 评论 -
poj 2081
打表#include #include #include const int maxn = 550000;const int maxnum = 10000000;using namespace std;int result[maxn];bool flag[maxnum];int main(){ memset(flag,false,sizeof(fl原创 2013-08-16 09:50:11 · 545 阅读 · 0 评论