DP
文章平均质量分 66
jz-nice
这个作者很懒,什么都没留下…
展开
-
hdu 2546 饭卡(01背包)
思路:余额>=5,找出最贵的一道菜,用最后的5元来买,使得饭卡的余额最小,剩下的用01背包的来做装满#include #include #include #define max(a,b) a>b?a:busing namespace std;int c[1005],d[1005];int main(){ int n,i,j,money,V; while(scanf原创 2013-07-07 17:55:46 · 961 阅读 · 0 评论 -
hdu1176免费馅饼(DP)
题目链接:hdu1176原创 2014-04-19 08:18:59 · 685 阅读 · 0 评论 -
poj 1088/nyoj 10 滑雪(记忆化搜索/DP)
题目链接:poj1088 nyist10#include#include#define max(a,b) (a>b?a:b)int map[105][105];int d[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};int dp[105][105];int n,m;int dfs(int x,int y){ if(dp[x][y] > 1)原创 2013-07-18 10:10:34 · 779 阅读 · 0 评论 -
hdu1978(记忆化搜索/DP)
题目链接:hdu1978原创 2014-04-21 14:56:57 · 802 阅读 · 0 评论 -
poj1159(回文串+LCS+滚动数组)
题目链接:poj1159/*题目大意: 给一串字符,问最少添加几个字符能使这个字符串变成回文字符串思路: 添加字符数 = 原串字符数 - 原串和其逆串的最长公共子序列的长度然后就是用滚动数组求最长公共子序列,在0~1行之间滚动,滚动表达式为i&和(i-1)&1,就是取余滚动*/#include #include #include #include usi原创 2014-03-26 11:22:01 · 948 阅读 · 0 评论 -
hdu 1257 最少拦截系统(DP)
有点水.....测试数据也很水.....#includeint dp[100];int main(){ int n,num,i,top; while(~scanf("%d",&n)) { dp[1] = 0; top = 0; while(n--) { scanf("%d",&num); for(i = 1原创 2013-07-10 09:48:35 · 1318 阅读 · 0 评论 -
poj1065(单调递增最长子序列变形)
题目链接:poj1065原创 2014-05-07 19:43:06 · 827 阅读 · 0 评论 -
hdu1503(最长公共子序列加强版)
题目链接:hdu1503原创 2014-04-21 18:35:13 · 1240 阅读 · 0 评论 -
poj3786(DP,递推)
题目链接:poj3786/*poj3786题意 :由0,1组成的长度为n的数列x1,x2,x3,x4.....xn,定义一个操作为AdjBC(x) = x1*x2 + x2*x3 + x3*x4 + … + xn-1*xn 。输入两个数n和m,求长度为n的数列,经过上述操作,最后结果为m共有多少种思路 : DP,递推d[i][j][0]:表示前i项组成和为j且第i项为0共有多少种原创 2014-04-23 16:23:29 · 556 阅读 · 0 评论 -
poj1160DP(POST OFFICE 邮局问题)
题目链接:/*poj1160题意:用数轴描述一条高速公路,有V个村庄,每一个村庄坐落在数轴的某个点上,需要选择P个村庄在其中建立邮局,要求每个村庄到最近邮局的距离和最小。状态:d[i][j]:前i个村庄建j个邮局的最小花费转移方程:d[i][j] = min(d[i][j], dp[k][j-1]+ dis[k+1][i]);dis[i][j]表示村庄i到村庄j之间建一个邮局的花费原创 2014-04-26 10:56:27 · 1264 阅读 · 0 评论 -
poj2184(01背包变形)
题目链接:poj2184/*题意: 有一些牛,每个牛有一个的智商值(用S表示)和幽默度(用F表示)选出若干牛,使S的和非负且F的和非负时,S+F最大思路: 将S当做体积,F当做价值,来装01背包。循环时,体积为负时,循环的方向和体积为正时相反。最多100组,每组-1000~1000,所以体积的范围[-1000*100,1000*100],因为体积有负数存在,所以将原创 2014-04-02 18:35:05 · 834 阅读 · 0 评论 -
poj3280(回文串,DP)
题目链接:/*题目大意: 一串字符,每添加一个字符或删去一个字符都要付出相应的花费求将这串字符变成回文串的最小花费思路: 删除一个字符和添加一个字符是等价的,所以考虑最小的一种即可 d[i][j]表示区间[i,j]的最小花费当a[i] == a[j]时, 区间[i,j]的花费就等于区间[i+1,j-1]的花费当a[i] != a[j]时 添加原创 2014-03-26 19:14:38 · 866 阅读 · 0 评论 -
poj2479(子串和变形,DP)
题目链接:poj2479话说,一开始是用线段树A的。。。。。原创 2014-04-18 09:16:31 · 627 阅读 · 0 评论 -
hdu 1559 最大子矩阵(DP)
#include#include#define max(a,b) a>b?a:bint d[1005][1005];int main(){ int T,n,m,x,y,i,j; scanf("%d",&T); while(T--) { scanf("%d%d%d%d",&n,&m,&x,&y); memset(d,0,siz原创 2013-07-10 19:06:51 · 824 阅读 · 0 评论 -
hdu 2955 Robberies(01背包变形)
题目链接:hdu2955思路:将各个银行的总资产当做背包的容量V,然后求最大的逃跑率初始化:抢劫的金额为0时,一定是安全的,所以d[0]=1;其他金额初始为逃跑概率最小,全为0#include#include#includeusing namespace std;double d[10005],v[105];int c[105];int main(){ int原创 2013-07-31 09:32:29 · 907 阅读 · 0 评论 -
hdu 1114 Piggy-Bank(完全背包)
题目链接:hdu1114大意:给出存钱罐本身的重量和装钱后的重量,以及存钱罐中钱的面值和重量,求存钱罐装满时,钱的总和最小是多少思路:完全背包解题,每种钱币都可以装无限个,注意初始化的值#include#include#include#define N 1005#define INF 0xffffffffusing namespace std;int d[10005],c[原创 2013-07-29 16:26:04 · 2054 阅读 · 0 评论 -
hdu 1171 Big Event in HDU(多重背包+二进制优化)
题目链接:hdu1171思路:将多重背包转为成完全背包和01背包问题,转化为01背包是用二进制思想,即件数amount用分解成若干个件数的集合,这里面数字可以组合成任意小于等于amount的件数比如:7的二进制 7 = 111 它可以分解成 001 010 100 这三个数可以组合成任意小于等于7 的数,而且每种组合都会得到不同的数; 如果13 = 1101 则分解为 0001 0010原创 2013-07-29 17:55:00 · 982 阅读 · 0 评论 -
nyist 747 蚂蚁的难题(三)
题目链接:nyist747解法:贪心 动态规划思路:如果没有 B[i]这个属性的话就是明显的 01 背包问题。现在考虑相邻的两个物品 x,y.假设已经耗费 p 的时间,那么分别列出先做 x,y 的代价:A[x]-(p+C[x])*B[x]+A[y]-(p+C[x]+C[y])*B[y] ①A[y]-(p+C[y])*B[y]+A[x]-(p+C[y]+C[x])*B[x]原创 2013-10-29 19:32:32 · 985 阅读 · 0 评论 -
hdu1565 方格取数(状态压缩)
题目链接:hdu1565对于每一个数,取或者不取,用0表示不取,1表示取,那么对于每一行的状态,就可以用一个二进制的数来表示。比如5的二进制为101,就表示取第一个数,不取第二个数,取第三个数。将符合要求的状态保存下来,什么是符合要求的呢?即二进制数中不存在相邻的1(110,011都是不符合要求的)。可以用移位并按位与的办法来判断,举个例子:110左移一位为011 ,110&011 = 1原创 2014-03-03 13:17:07 · 1563 阅读 · 0 评论 -
hdu4539(状态压缩)
题目链接:hdu4539曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。本题每个士兵曼哈顿距离为2的位置不能有其他的士兵,假设士兵位置(i,j),则(i-2,j)(i+2,j)(i,j-2)(i,j+2)(i-1,j-1)(i-1,j+1)(i+1,j-1)(i+1,j+1)这些位置都不能有其他的士兵。思路:状态压缩原创 2014-03-11 08:07:16 · 1421 阅读 · 0 评论 -
poj1080(LCS变形)
题目链接:poj1080/*poj 1080题意:给出两个基因字符串a,b,每一种匹配都有一个值,可以在串中添加‘-’,改变匹配的顺序,最后求全部匹配的最大值思路:先将字符串转化,每个字符分别用0,1,2,3,表示‘-’用4表示状态:d[i][j]表示串a前i个和串b前j个匹配的最大值转移方程:d[i][j] = max( d[i-1][j-1]+c[a[i]][b[j]], d[原创 2014-04-29 11:01:17 · 799 阅读 · 0 评论 -
uva624(01背包+打印路径)
题目链接:uva624/* 简单01背包,注意路径可能不只一种*/#include #include #include #include #include #include #include #include using namespace std;const int inf = 0x3f3f3f3f;const int N = 2005;int d[N];原创 2014-03-31 19:02:18 · 959 阅读 · 0 评论 -
poj2385(DP)
题目链接:/*poj 2385题意:有两颗树,同一时间内只有一个树会掉苹果,时间为n,在苹果树间来回的次数最多为m次,问最多拿到多少苹果思路:DP,注意初始化状态:d[i][j][k]表示第i分钟第j个来回在第k棵树下拿到最多的苹果数d[i][j][0] = max(d[i-1][j-1][1], d[i-1][j][0]) + a[i][0];d[i][j][1] = max(原创 2014-04-28 18:58:50 · 749 阅读 · 0 评论