动归
哎呀呀呀呀呀呀
这个作者很懒,什么都没留下…
展开
-
hdu2955(好)背包转化
题目大意:有一个强盗要去几个银行偷盗,他既想多偷点钱,又想尽量不被抓到。已知各个银行的金钱数和被抓的概率,以及强盗能容忍的最大被抓概率。求他最多能偷到多少钱? 思路:背包问题,原先想的是把概率当做背包,在这个范围内最多能抢多少钱。 但是问题出在概率这里,一是因为概率是浮点数,用作背包必须扩大10^n倍来用,而浮点数精度不高输入0.04存储有可能变成0.39。二是最大被抓概率不是简单的累加。1-...原创 2018-08-09 12:23:54 · 246 阅读 · 0 评论 -
背包问题
详见博客 https://blog.csdn.net/yoer77/article/details/70943462原创 2018-08-09 16:46:03 · 85 阅读 · 0 评论 -
最长上升子序列模板
采用lower_bound #include<stdio.h> #include<algorithm> #include<cstring> using namespace std; int main() { int n,num[100100],lis[100100],len; while(scanf("%d",&n)!=EOF) ...原创 2018-08-09 20:41:41 · 193 阅读 · 0 评论 -
最长公共字串(模板)
#include<iostream> #include<string.h> using namespace std; int c[10000][10000]; char str1[10000]; char str2[10000]; void func(int m,int n){ if((m<0)||(n<0)) return ; ...转载 2018-08-10 13:34:31 · 227 阅读 · 0 评论 -
混合背包(模板)只保留了函数部分(每个函数对应了每一种背包)侧面反应了多重背包可以换为01和完全背包而且更快
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m,num[110],v[110],ans; int val[100010]; void package01(int weigh){ for(int i=m;i>=weigh;--i)...原创 2018-08-10 15:00:42 · 96 阅读 · 0 评论 -
有依赖的背包详解以hdu3449为例
二维数组(好理解,一组物品等于上一组的前提上最优解再取最优解,然后在更新最优解),这里dp[i][j]是指前i件物品在花j元时能得到的最大价值 其中 先把主件分离 即价值 比主件还小的部分封闭起来。 for(j=0;j<bc;j++) dp[i][j]=-1; 然后将可以装物品的部分赋予上一次的最优解(每一次都要做一次更新,继承上一次的最优解)...原创 2018-08-11 15:09:41 · 513 阅读 · 1 评论 -
递推与迭代的转换(动态规划)
递推(顺序推直到找到最底层的出口退出) 将递推换成迭代(逆序推,这样每次上一步的值都已经计算好了,不用担心找不到值的情况,只要能保证上一步的值已经计算出来并保存好即可)...原创 2018-08-08 12:20:40 · 399 阅读 · 0 评论