随笔分类 - 动规
摘要:#includeusing namespace std;#define MAX 100010//用你自己的思维解决问题long long v[MAX],height[MAX],dp[MAX],maxn;int main(){ int n; while(cin>>n){ if...
阅读全文
摘要:题意:一个强盗要去抢劫银行,对于每个银行来说,都有一个不被抓的概率p,和能抢劫到的钱数money,每个银行最多只可以被抢劫一次。问在不被抓的总概率P下,怎样得到最大价值的钱数。根据题目的已知条件, 该问题可以使用基本01背包模型银行数量:N每家银行所拥有的金钱数量: money[i]盗取各家银行的风...
阅读全文
摘要:给定由n个整数(可能有负数组成的序列 a1,a2 a3,....an),要在这n个数中选取相邻的一段ai,a(i+1)....aj 使其和最大,当所有整数均为负数时,定义最大字段和为0. b[j]=max{b[j-1]+a[j],a[j]}#include using namespace std...
阅读全文
摘要:HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】 收藏Robberieshttp://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率...
阅读全文
摘要:设辅助数组b,定义b[i]表示以a[i]为结尾的最长递增子数列的长度。则:转移方程:b[1]=1;b[i]=max{b[k]+1}; 1=#include#define MAX 100using namespace std;int main(){ int a[MAX],b[MAX],visit[M...
阅读全文
摘要:有n种物品,第i种物品的体积为V[i],重量为W[i],选一些物品放到容量为c的背包里,使得背包内的物品在总体积不超过C的前提下重量尽量大。用d(i,j)表示当前处于第i层,背包的剩余重量为j,通俗点说就是把 i i+1 i+2 .....n 个物品装到容量为j的背包中的最大总重量。所以我们得到的状...
阅读全文
摘要:假设求Xi和Yi的最长公共子序列,设c[i][j]表示它俩最长公共子序列的长度。 0 i=0或j=0c[i][j]= c[i-1][j-1]+1 i,j>0且Xi=Yi max{c[i][j-1],...
阅读全文
摘要:#includeusing namespace std;/*计算括号化方案数:标量乘法作为代价衡量,应该使标量乘法尽可能少。m[i,j]表示Ai.....Aj所需标量乘法的最小值。i=j 时只有一个矩阵,无需分割 m[i,i]=0;采用自底向上的方式:*/int m[100][100];int p...
阅读全文
摘要:#includeusing namespace std;/*钢条切割:给定长度为1,2,3,4......10的价格pi算出给定一个长度为n的钢条怎样切割使其出售所得利润最大。*/int p[]={0,1,5,8,9,10,17,17,20,24,30};int r[100],s[100]; /...
阅读全文
摘要:#include#includeusing namespace std;/*给出长度为i的钢条对应的出售价格为pi,问题:给定一段长度为n的钢条怎么切才会使收益最大;技巧:对于大量重复的子问题,我们采取记忆化,这样相比于之前大大节省了时间*/int p[100]={0,1,5,8,10,13,17,...
阅读全文
摘要:6 -1 5 4 -7#includeusing namespace std;int main(){ int t,n,a,max,sum,start,end,temp; while(cin>>t){ for(int i=1;i>n; max=-1001;...
阅读全文

浙公网安备 33010602011771号