动态规划-背包
Dave_L
这个作者很懒,什么都没留下…
展开
-
多重背包-可行性poj1742
People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coins.He decided to buy a very nice watch in a nearb原创 2017-07-17 10:50:47 · 356 阅读 · 0 评论 -
dp基础-关于背包的一些题型总结
01背包hdu2546思路:拿出5块钱去买最贵的,然后对剩下的钱进行01背包。Code:#include using namespace std;const int AX = 1e3+66;int a[AX];int dp[AX];int main(){ int n , m ; while( scanf("%d",&n) && n ){ for(原创 2018-05-04 18:08:38 · 288 阅读 · 1 评论 -
HDU2546
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 Input 多组数据。对于每组数据: 第一原创 2017-07-25 16:32:12 · 339 阅读 · 0 评论 -
POJ 1252
两次完全背包求买【1,100】价值的东西平均需要和最多需要硬币数目,可以通过加法和减法获得一个价值Euro EfficiencyTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 4116 Accepted: 1757Description原创 2017-07-18 15:27:32 · 315 阅读 · 0 评论 -
混合背包
第四讲 混合三种背包问题问题如果将P01、P02、P03混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?01背包与完全背包的混合考虑到在P01和P02中给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时原创 2017-07-18 14:29:29 · 387 阅读 · 2 评论 -
二维背包
第五讲 二维费用的背包问题问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费用加了原创 2017-07-18 14:26:33 · 573 阅读 · 0 评论 -
完全背包(背包九讲之2)
题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f原创 2017-07-18 14:15:48 · 306 阅读 · 0 评论 -
01背包
题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i原创 2017-07-18 14:11:09 · 518 阅读 · 1 评论 -
多重背包问题
下面先给出多重背包模板:#include#include#include#define N 1000 //物品个数 #define M 100000000 //所有物品可能的最大价值 int m[N],c[N],w[N],f[M];int V;int max(int a,int b){return a>b?a:b;}void ZeroOnePack(int原创 2017-07-18 11:32:51 · 312 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络预赛 G 隔板+费马小定理 J 牛顿迭代法+java开平方根 K 背包 L矩阵快速幂
G思路:隔板法知道结果是 2 ^ ( n - 1 ),n过大。 费马小定理为 a^(p-1) ≡ 1 mod p ; a, p 互质,p为质数。 所以2^(p-1)% p 为1,2^k*(p-1) % p 也为1,所以找出n = k*(p-1) + m 。只需要求2 ^ m 即可。Code:#include <bits/stdc++.h>#define LL long...原创 2018-09-15 19:15:39 · 285 阅读 · 0 评论