随笔分类 - ACM-DP
摘要:题意:M*N的矩阵,每个格子上有一个值。规则:如果你拾起了某个格子(i,j)上的值,那么第i-1行、第i+1行、(i,j-1)格子上、(i,j+1)格子上的值都不能取。问最多可以取得多少值(最大值)。思路:如果某行取了某一个值,则它的前一行和后一行都不能取。所以我们必须知道这行可以取得的最大值是多少...
阅读全文
摘要:题意:都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径...
阅读全文
摘要:题意:杭电搬迁,有N种设备,每种设备有个价值V,数量M,要求将这些设备平分,使得平分后两边的总价值尽可能地相等。输出两边各自的总价值。思路:背包DP后,P=所有的总价值/2,然后从P开始往两边找到第一个满足的价值。可以降维,但是要注意for循环的顺序。看代码。代码:int v[55], m[55];...
阅读全文
摘要:题意:N(不超过30)种木块,每种木块有长、宽、高x,y,z。木块A可以搭在木块B上当且仅当A的底面长和宽都分别小于B的顶面的长与宽,即不能有超出B的部分。问垒起来的“木块塔”的最大高度。思路:每种木块有6种形态,所以总共有6*N种木块,列张二维关系表,然后记忆搜。代码:struct node{ ...
阅读全文
摘要:题意:有N元经费,M种大米,每种大米有单袋价格p元,单袋重量h,以及对应袋数c。问最多可以买多重的大米。思路:经典多重背包,用二进制的方法。看代码代码:struct node{ int price,weight,num;}obj[105];int dp[105];int n,m;void Mu...
阅读全文
摘要:题意:M*N的格子构成的城市,每一个格子上不是F就是R,F代表Free,表示这个格子可以使用,R代表不可以使用。要求:在这里面找到一个矩形,使得面积是最大的。(即必须满足覆盖矩形的每一个格子都是F)输入:M,N0 && a[x][i]>T; while(T--){ scanf("...
阅读全文
摘要:题意:有一个柱状图,有N条柱子。每一条柱子宽度都为1,长度为h1...hN。在这N条柱子所构成的区域中找到一个最大面积,每平方米3块钱,问最多赚多少钱。输入:1>n,n){ mem(leftt,0); mem(rightt,0); rep(i,1,n){ ...
阅读全文
摘要:题意:有一个圆圆的毯,被平均分成三个扇形。分为标记为A,B,C。小余从A开始跳,每次可跳到相邻的扇形上。(A->B 或 A->C)问小余跳n次,最后回到扇形A的方案数是多少。思路:A,B,C是三个状态。我们画一棵生长的树,一层一层下来,然后发现每一层上其实最多就只有三种状态。所以明显是可以用DP解喽...
阅读全文
摘要:题意:小余玩游戏,离最后一级还需n的经验值,但是他已经很厌烦了,还剩下m的忍耐度。每杀一只怪小余会得到相应的经验,同时减掉相应的忍耐度。当忍耐度降到0或者0以下时,小余就不会再玩这个游戏。小余还说他最多杀s只怪。求小余升完最后一级能保留的最大忍耐度。如果无法升完最后一级则输出-1。输入:n, m, ...
阅读全文
摘要:题意:有N个志愿者。指挥部需要将他们分成若干组,但要求每个组的人数必须为素数。问不同的方案总共有多少。(N个志愿者无差别,即每个组的惟一标识是:人数)思路:假设N个人可分为K组,将这K组的人数从小到大排序,num1,...,numk。故N个人分组的方案数dp[n]=sum(dp[numk]) (所有...
阅读全文
摘要:题意:M*N的grid,每个格上有一个整数。小明从左上角(1,1)打算走到右下角(M,N)。每次可以向下走一格,或向右走一格,或向右走到当前所在列的倍数的列的位置上。即:若当前位置是(i,j),可以走到(i,k*j)问取走的最大和是多少。思路:水DP。。。边界的初始化要考虑。(因为有负数)。代码:i...
阅读全文
摘要:题意:小偷去抢银行,他母亲很担心。他母亲希望他被抓的概率真不超过P。小偷打算去抢N个银行,每个银行有两个值Mi、Pi,Mi:抢第i个银行所获得的财产 Pi:抢第i个银行被抓的概率求最多能抢得多少财产。思路:由于概率不是整数,所以不能将其作为背包容量。继续观察,发现Mi是整数,调整思路可发现,可以将...
阅读全文
摘要:题意:给一个m*n的矩阵,每格上有一个数。找从第1行到第m行的一条路径,使得这条路径上的数之和最小。路径必须满足相邻两行所选的两个数的纵坐标相邻(即一个格子必须是另一个格子的周围八个格子中的一个)输出每一行取的数的列值。 若有多个答案,则路径要求尽量靠右。思路:简单数塔DP。题比较不好读,不过可以分...
阅读全文
摘要:题意:N个数,求第二长上升子序列的长度。数据范围:1. 1 >T; while(T--){ scanf("%d",&n); rep(i,1,n) scanf("%d",&a[i]); rep(i,1,n) f[i]=1; mem(NOTa...
阅读全文
摘要:题意:n个点m条边构成无向图。每一步可以从一个点走向与其连接的另一个点。每一步的概率都相同。对于每个点而言,考虑所有步数为d的旅行路线,求不经过它的概率。(不经过该点的路线总数 / 所有路线总线)数据范围:n#include #include #include #include #include #...
阅读全文
浙公网安备 33010602011771号