动态规划
文章平均质量分 77
Stayaccept
这个作者很懒,什么都没留下…
展开
-
hdu3516(dp四边形优化)
链接:点击打开链接题意:给定一些点(xi,yi)(xj,yj)满足:iyj。用下面的边连起来,使得所有边的长度最小代码:#include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int x[1005],y[1005],s[2005][2005]原创 2016-06-19 19:27:03 · 1034 阅读 · 0 评论 -
hdu5459(递推)
链接:点击打开链接题意:求第n个串中,每两个c的距离和代码:#include #include #include #include #include using namespace std;const long long MOD=530600414;long long dp[300005];long long dis[300005],num[300005],len[3000原创 2016-08-28 18:43:52 · 510 阅读 · 0 评论 -
hdu5492(递推+数学)
链接:点击打开链接题意:给出一个n*m的矩阵,每个点上有权值,求(N+M−1)∑N+M−1i=1(Ai−Aavg)2的最小值代码:#include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int a[35][35],dp[35][35][2005];原创 2016-08-29 16:40:45 · 419 阅读 · 0 评论 -
hdu5489(最长上升子序列变形)
链接:点击打开链接题意:给出一个长度是n的序列,求去掉连续m个的最长上升子序列长度代码:#include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int a[100005],b[100005],dp[100005],ans[100005];int mai原创 2016-08-29 16:45:19 · 786 阅读 · 0 评论 -
Gym100694A(贪心+背包)
链接:点击打开链接题意:给出n个物品,和背包容量m,给出每个物品的价值,重量,和取得这个物品获得的额外的背包容量,可以最多选择两个物品获得额外的背包容量,问最后的最大价值代码:#include #include #include #include #include #include using namespace std;struct node{ long long原创 2016-09-09 16:05:52 · 408 阅读 · 0 评论 -
UVALive3637(01背包+贪心)
链接:点击打开链接题意:给出n本书的高和宽,要求做一个三层的书架,将所有书放入书架中,每层不能为空,每层的高度为当层最高的数的高度,当层的宽度为当层所有书的宽度和,书架的宽度为三层的最大宽度,书架的高度为三层的高度和,求书架高度乘宽度的最小值代码:#include #include #include #include #include using namespace std;c原创 2016-08-30 11:30:43 · 457 阅读 · 0 评论 -
hdu2089(数位dp)
链接:点击打开链接题意:求N~M中不含62并且不含4的数有多少(6和2必须相连,61152不满足含62这种情况,11562含62);代码:#include <map>#include <set>#include <vector>#include <math.h>#include <stdio.h>#include <std...原创 2015-09-26 10:03:59 · 435 阅读 · 0 评论 -
hdu2955(01背包)
链接:点击打开链接题意:抢银行,给出一个被抓的概率的上限(超过这个概率则被抓),然后给出几组数据分别为物品的价值和被抓的概率,求在不被抓的情况下能取得的最大价值; 代码:#include#include#include#include#includeusing namespace std;double dp[10005],v[10005];int m[10005]原创 2015-07-02 11:39:12 · 436 阅读 · 0 评论 -
51nod1050(最大子序列和)
链接:点击打开链接题意:求循环数组的最大子序列和代码:#include using namespace std;long long num[100005];int main(){ long long n,i,sum1,sum2,summ,maxx,maxx1,maxx2; while(cin>>n) { sum1=sum2=summ原创 2015-07-27 15:46:14 · 600 阅读 · 0 评论 -
51nod1051(最大子矩阵和)
链接:点击打开链接题意:给出一个矩阵,求出最大子矩阵和代码:#include #include#include#includeusing namespace std;long long a[505][505];long long b[505],m,n;int main(){ long long i,j,k,sum,maxx,temp; while(c原创 2015-07-27 15:49:01 · 679 阅读 · 0 评论 -
hdu1059(01背包)
链接:点击打开链接题意:有六个物品价值分别为1~6,依次给出六个物品的数量,问是否能平均分成价值相等的两份代码:#include #include #include #include //#define maxx(a,b) (a>b?a:b)using namespace std;int a[10],w[100005],dp[100005];int main(){ i原创 2015-09-10 20:34:21 · 1209 阅读 · 0 评论 -
poj3211(01背包)
链接:点击打开链接题意:有N件衣服,M种颜色,夫妻二人可以同时一人洗一件衣服,为了防止衣服被染色,只能洗完一种颜色的衣服后再洗其余颜色的衣服,问花费时间最少是多少代码:原创 2015-09-11 21:13:25 · 642 阅读 · 0 评论 -
poj1745(01背包)
链接:点击打开链接题意:给出N个数,这N个数中每个数必须用1次,做加减运算,求最后结果是否能整除K代码:#include #include #include #include #include using namespace std;int dp[10005][105],s[10005]; //dp[i][j]代表前i个数做运算后余数是否等于ji原创 2015-09-11 21:18:00 · 1009 阅读 · 0 评论 -
hdu3555(数位dp)
链接:点击打开链接题意:求1~N中含49的数的个数(4和9必须相邻)代码:#include<bits/stdc++.h>using namespace std;const int siz=50;long long a[50],dp[50][15];long long dfs(int pos,int pre,int lim){ int i,u; l...原创 2015-09-26 10:11:19 · 589 阅读 · 0 评论 -
poj2686(状态压缩dp)
链接:点击打开链接题意:n张车票,m座城市,k条路,问从城市a到城市b的最短时间,从一个城市移动到另一个城市所需时间等于城市之间的长度除以每张票上数字,一张票只能使用一次代码:#include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;int t[50],d[30原创 2015-10-17 13:45:33 · 502 阅读 · 0 评论 -
poj2385(递推)
链接:点击打开链接题意:给出一个T和W,在1~T秒内从编号为1,2的两棵果树掉落果实,初始在第一棵树下,可以移动W次,问最多收货多少果实代码:#include #include #include using namespace std;int dp[1005][35],num[1005];int T,W;int main(){ int i,j,ans; whil原创 2015-11-26 21:09:32 · 423 阅读 · 0 评论 -
poj3616(最长上升子序列变形)
链接:点击打开链接题意:给出m组数据a,b,c代表在第a分钟到第b分钟产生c个效益,问最大产生多少效益(区间不能重叠)代码:#include #include #include #include #include using namespace std;struct node{ int l,r,w;};bool cmp(node a,node b){ if(原创 2015-11-29 18:58:03 · 556 阅读 · 0 评论 -
poj1742(多重背包)
链接:点击打开链接题意:给出n种钱的数量和面额,问用这些钱能拼成1~m中的值的数量代码1:#include #include #include #include using namespace std;int dp[100005],w[105],v[105];int n,m;int main(){ int i,j,ans; while(scanf("%d%d"原创 2015-11-30 20:44:00 · 608 阅读 · 0 评论 -
poj2392(多重背包)
链接:点击打开链接题意:给出K个方块的高度,数量和最高能够放多高,求出最大能放多高代码:#include #include #include #include using namespace std;struct node{ int h_i,a_i,c_i;};bool cmp(node x,node y){ return x.a_i<y.a_i;}nod原创 2015-11-30 20:54:18 · 824 阅读 · 0 评论 -
poj3046(递推)
链接:点击打开链接题意:有A个数,一共T种,从中选一些数作为一个集合,问集合大小在A到B中的种类有多少代码:原创 2015-11-30 21:04:56 · 1415 阅读 · 0 评论 -
vijos p1347&&vijos p1455(递推)
1.vijos1347链接:点击打开链接题意:有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大代码:#include #include #include #include #include using namespace std;char s[55];long long sum[55][55],dp[55][原创 2016-09-11 14:48:30 · 340 阅读 · 0 评论 -
hdu5009(dp+双向链表优化)
链接:点击打开链接题意:给出一个长度是n的区间中每一个元素的颜色,每次只能选一个区间染色,染色的代价为这个区间不同颜色数的平方,问最小代价代码:#include #include #include #include #include #include #include using namespace std;const long long INF=0x3f3f3f3f3f3原创 2016-09-11 19:23:37 · 416 阅读 · 0 评论 -
vijos p1470(递推)
链接:点击打开链接题意:教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值。教主最喜欢3种树,这3种树的高度分别为10,20,30。教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高。原创 2016-09-12 10:58:55 · 390 阅读 · 0 评论 -
hdu5036(概率dp+bitset优化)
链接:点击打开链接题意:n个房间,每个房间都有若干个钥匙打开其他的门,如果手上没有钥匙可以选择炸开一个门,求打开所有门的情况下炸弹的期望代码:#include #include #include #include #include #include using namespace std;bitset s[1005];int main(){ double ans;原创 2016-09-12 23:01:49 · 799 阅读 · 0 评论 -
Codeforce 414B(递推)
链接:点击打开链接题意:从1~N中选K个数,b1,b2,b3,...bk,使得bi|bi+1(11000000007取余代码:#include #include #include #include #include using namespace std;const long long MOD=1000000007;long long dp[2005][2005];int原创 2015-12-03 12:48:05 · 517 阅读 · 0 评论 -
Codeforce 106C(多重背包)
链接:点击打开链接题意:有两种原料,m种面包,每种面包可以由bi克原料B和ci克原料A组成,能够产生di的价值,也可以只有c0克原料A生产,产生d0的价值,给出第A种原料N克,每种面包自带ai克原料B(只能供当前这种面包使用),问最大产生多少价值代码:#include #include #include #include using namespace std;in原创 2015-12-24 18:31:26 · 453 阅读 · 0 评论 -
poj2441(状态压缩dp)
链接:点击打开链接题意:有n头牛,每头牛有自己喜欢住的屋子,问使所有牛都住上自己喜欢的屋子有几种可能代码:#include #include #include #include #include using namespace std;int d[25][25],dp[(1<<20)+5]; //因为开成二维会MLE,因此变原创 2016-01-28 00:03:14 · 1080 阅读 · 0 评论 -
poj3254(状态压缩dp)
链接:点击打开链接题意:有一块N*M的空地,1表示可以播种,0表示不可以,现在要求播种并且播种区域不能相邻,输出所有可以播种情况的种数并对100,000,000区域代码:#include #include #include #include #include using namespace std;const long long mod=100000000;原创 2016-01-28 00:11:33 · 456 阅读 · 0 评论 -
poj2836(状态压缩dp)
链接:点击打开链接题意:有n个点,用非零的矩形全覆盖住这些点,求所有矩形的面积和(重复部分重复算)代码:#include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;struct node{ int x,y;}a[20];i原创 2016-01-29 21:35:00 · 701 阅读 · 0 评论 -
poj1014(多重背包)
链接:点击打开链接题意:有价值为1,2,3,4,5,6的6种物品,输入6个物品的数量,问能不能将物品分成价值相等的两份(物品不能分割)代码:#include #include #include using namespace std;bool f[500005];int w[10],v[10],used[500005];int main(){ int原创 2016-02-21 23:14:04 · 662 阅读 · 0 评论 -
hdu1171(多重背包)
链接:点击打开链接题意:给出每个物品的价值和数量,如何分配使得A,B所得价值最接近并且A的价值不能小于B代码:#include #include #include #include using namespace std;int v[10005],w[10005],dp[500005];int main(){ int n,i,j,k,num,tmp,s原创 2016-02-23 22:09:20 · 476 阅读 · 0 评论 -
poj1276(多重背包)
链接:点击打开链接题意:给出一个价值sum,然后给出n钱币的个数与价值,要求用这些钱币组成一个最接近sum的值(总和不大于sum)代码:#include #include #include #include using namespace std;bool f[100005];long long v[105],w[105],used[100005];int原创 2016-02-23 22:14:32 · 458 阅读 · 0 评论 -
poj3260&&hdu3591(多重背包+完全背包)
链接:点击打开链接题意:顾客去买T元的物品,有N种钱币,给出每种钱币的面额和数量,卖家每种钱币有无限个.现在顾客想让交易的钱张数最少(即找回和付出钱的张数总和最少)代码:#include #include #include #include using namespace std;const int INF=0x3f3f3f3f;bool f[10150];原创 2016-02-23 22:23:46 · 666 阅读 · 0 评论 -
zoj2156(分组背包)
链接:点击打开链接题意:给出面值为1,5,10,25四种钱币分别的数量,求恰好组成面值P的最大钱币数的情况代码:#include #include #include #include #include #include using namespace std;struct node{ int x,y,sign;};int dp[15][10原创 2016-02-26 02:25:06 · 340 阅读 · 0 评论 -
hdu1712(分组背包)
链接:点击打开链接题意:A[i][j]表示用j天学习第i个课程能够得到A[i][j]的收益,求m天内获得的收益最大值,一天只能上一节课代码:#include #include #include #include using namespace std;int dp[105],a[105][105];int main(){原创 2016-02-26 02:34:16 · 730 阅读 · 0 评论 -
hdu3033(分组背包)
链接:点击打开链接题意:有k种牌子的鞋,每种牌子至少买一双,每双鞋子有所属牌子的编号,标价和实际价值,求用M钱买到的鞋的最大价值代码:#include #include #include #include #include #include using namespace std;struct node{ int x,y,sign;};in原创 2016-02-26 02:37:06 · 412 阅读 · 0 评论 -
hdu3496(二维01背包)
链接:点击打开链接题意:有N张电影票,但只可以买M张,并且最多可以看L分钟,给出每场电影的长度和价值,求出看M场电影的最大值,如果不能看够M场则输出0代码:#include #include #include #include using namespace std;int dp[105][1005];int v[1005],w[1005];int main原创 2016-02-26 02:40:53 · 897 阅读 · 0 评论 -
hdu3535(01背包)
链接:点击打开链接题意:有n种工作,有T个单位时间可用.给出m和s,代表当前这种工作有m件事可以做,是第s类的工作(s=0表示这m件事中至少得做一件,s=1表示这m件事中最多做一件,s=2表示这m件事可以做也可以不做).再给出c和g表示你做这件事用c的时间,能获得gi的快乐值.求在T的时间内你能获得的最大快乐值代码:#include #include #include #i原创 2016-02-29 23:20:45 · 742 阅读 · 0 评论 -
poj3093(背包最大容量)
链接:点击打开链接题意:给定一个容量为D的背包和V件物品各自的体积,求有多少种方法使得背包再也装不下任何物品代码:#include #include #include #include using namespace std;int w[1005],dp[1005],sum[1005];int main(){ int t,n,v,i,j,k,ans,t原创 2016-02-29 23:30:55 · 934 阅读 · 0 评论 -
hdu1561(树形dp)
链接:点击打开链接题意:在一个地图上,有N座城堡,每座城堡都有一定的宝物,每次游戏允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡,输入2个整数,N,M,在接下来的N行里,每行包括2个整数a,b,在第i行,a代表要攻克第i个城堡必须先攻克第a个城堡,如果a=0则代表可以直接攻克第i个城堡.b代表第i个城堡的宝物数量,输出攻原创 2016-02-29 23:40:10 · 766 阅读 · 0 评论