
动态规划
文章平均质量分 70
lp_opai
我没有时间写一封简短的信,所以我写了一封长的。
展开
-
hdu 1087 (最大上升子序列和)动态规划
# include # include using namespace std;int main(){ int i,n,j,max,maxsum,a[1010],b[1010]; while(~scanf("%d",&n),n) { for(i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } maxsum=0;原创 2014-07-17 09:13:17 · 536 阅读 · 0 评论 -
zoj 2822 Sum of Different Primes (01背包)
///给你n 求他能分解成多少个的不同的k个素数相加之和///01背包,素数打表# include # include # include # include # include using namespace std;int cot;int used[1500];int prime[1500];void sushu()///素数打表{ memset(used,0,原创 2014-11-19 20:03:40 · 791 阅读 · 0 评论 -
hdu 1506 Largest Rectangle in a Histogram ((dp求最大子矩阵))
# include # include # include # include using namespace std;__int64 a[100010],l[100010],r[100010];///l[i]左边连续大于等于a[i]的下标,r[i]右边连续大于等于a[i]的下标,所以对于a[i]的矩形面积为(l[i]-r[i]+1)*a[i];int main(){ __i原创 2014-11-02 10:35:17 · 767 阅读 · 0 评论 -
hdu 2870 Largest Submatrix (hdu1505加强版)
# include # include # include # include using namespace std;int map1[1010][1010];char a[1010][1010];int map[1010][1010];int ans;int i,j,n,m;int l[1010],r[1010];void slove (char t1,char t2,原创 2014-11-05 21:37:56 · 656 阅读 · 0 评论 -
hdu 1505 City Game (hdu1506加强版)
# include # include # include # include using namespace std;char a[1010][1010];int dd[1010][1010];///宽度int r[1010],l[1010];int main(){ int t,i,j,n,m,max1; while(~scanf("%d",&t)) {原创 2014-11-03 22:17:53 · 636 阅读 · 0 评论 -
HDU 2830 Matrix Swapping II(最大完全子矩阵之可移动列)
/*题意:给你一个矩阵,里面的数字只有0和1两种,其中,列可以任意移动。问如何移动可以使某个子矩阵中元素全部是1,求出这个最大子矩阵的面积。对每一行进行处理然后再叠加,到每一行用num[i]记下到这一行有多少个1例如: 1 0 1 1 num[i]的记录就是: 1 0 1 1 1 0 0 1原创 2015-02-09 14:42:36 · 653 阅读 · 0 评论 -
hdu 4389 X mod f(x) (数位dp||打表)
///打表# include # include # include # include using namespace std;int f(int x){ if(x==0) return x; return f(x/10)+x%10;}int sum[]={0,11872,11166,10611,10042,9549,9104,8717,843原创 2015-07-09 18:42:32 · 3620 阅读 · 0 评论 -
Is Bigger Smarter
/*找出重量从小到大、智商从大到小排列的最长子序列*/# include # include using namespace std;struct node{ int w; int q; int id;};bool cmp(node a1,node a2){ return a1.w<a2.w;}int n;struct node a[101原创 2015-07-04 11:05:59 · 520 阅读 · 0 评论 -
poj 3014 Cake Pieces and Plates 分蛋糕(dp)
/*题意:求将m块蛋糕放进n个盘子里的方案数dp[i][j] 把j个蛋糕放到i个盘子里的方案数分3类讨论:1.i>j,肯定有空的,那么就直接等于dp[i-1][j],就是i-1个盘子装了j个蛋糕了,你再拿了一个盘子出来,这个盘子保证不装;2.i==j若里面有空的盘子那么同上,没空盘的时候只有一种情况,n个13.j>i没空盘的时候是这样处理的:先把每个盘子里放一个蛋糕,保证没空原创 2015-08-12 15:26:33 · 1075 阅读 · 0 评论 -
hdu 2844 Coins (多重背包)
/*题意 :给你一些不同价值和一定数量的硬币,求用这些硬币可以组合成价值在[1 , m]之间的有多少dp[i]来表示容量为i这个包包可以装多少价值,最后计数是要计价值和容量相等的个数*/# include# include# includeusing namespace std;int sum,dp[100010];void CompletePack(int v){ f原创 2015-08-31 09:41:49 · 389 阅读 · 0 评论 -
poj 1322 Chocolate (概率dp)
///有c种不同颜色的巧克力,一个个的取,当发现有相同的颜色的就吃掉,去了n个后,到最后还剩m个的概率///dp[i][j]表示取了i个还剩j个的概率///当m+n为奇时,概率为0# include # include # include # include using namespace std;double dp[1010][1010];int main(){ in原创 2014-10-04 20:17:45 · 1018 阅读 · 0 评论 -
zoj 3288 Domination (概率dp)
///dp[i][j][k]表示i行j列已经有棋子,且放了k个的概率///dp[i][j][k]一共有四种转移方式///1:dp[i-1][j][k-1] 概率为 (n-(i-1))*j/(n*m-(k-1))///2:dp[i][j-1][k-1] 概率为 i*(m-(j-1))/(n*m-(k-1))///3:dp[i-1][j-1][k-1] 概率为 (n-(i-1))*(原创 2014-10-12 19:54:59 · 816 阅读 · 0 评论 -
hdu 1864最大报销额 (01背包模板)
//注意将价格转化为整数即可# include # include # include using namespace std;int max(int a,int b){ return a>b?a:b;}int dp[3000050];int main(){ int n,i,j,flag,l,m; int suma,sumb,sumc,sum; double q,原创 2014-07-23 10:24:06 · 789 阅读 · 0 评论 -
hdu 3853 LOOPS (概率dp)
/*dp[i][j]表示(i,j)到(R,C)需要消耗的能量则:dp[i][j]=p1[i][j]*dp[i][j]+p2[i][j]*dp[i][j+1]+p3[i][j]*dp[i+1][j]+2;///+2 转移到下一个能量要消耗2化简得:dp[i][j]=((p2[i][j]*dp[i][j+1])+(p3[i][j]*dp[i+1][j])+2)/(1-p1[i][j]);*原创 2014-10-06 10:09:07 · 860 阅读 · 0 评论 -
很特别的一个动态规划入门教程
很特别的一个动态规划入门教程今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下~~~(说明一下,本人非常痛恨教材公式定理漫天飞,实际的讲解却讲得非常枯涩难懂,这种中国式的教育已经延绵了几千年了,现在中国的教材还是这个样子,讲清楚些明白些就那么难么?高中有个老师讲的一句话一直觉得很有道理:“教得会天才不是真本事,能把转载 2014-09-29 20:46:48 · 540 阅读 · 0 评论 -
hdu 4405 Aeroplane chess (概率dp)
/*题目大意:问从0到n所花费时间平均时间。每次有投骰子,投到几就走几步。当然了,还有近道。题目分析:假设现在在i,那么接下来有六种可能的走法,分别是:i到i+1,在由i+1到结束i到i+2,在由i+2到结束i到i+3,在由i+3到结束i到i+4,在由i+4到结束i到i+5,在由i+5到结束i到i+6,在由i+6到结束其中每一个可能的走法发生的概率为n为1/6。那么不妨定义d原创 2014-10-08 21:00:33 · 793 阅读 · 0 评论 -
hdu 2059 龟兔赛跑 (dp)
/*把起点和终点比作加油站,那总共有n+2个加油站了,每次都求出从第0个到第j个加油站(j<i)分别在加满油的情况下到第i个加油站的最短时间dp[i],最终的dp[n+1]就是最优解了。*/# include # include # include # define INF 999999999;using namespace std;int main(){ int L原创 2014-09-30 19:31:03 · 844 阅读 · 0 评论 -
hdu1421 搬寝室(dp)
/* 先对n中物品的重量排序 令dp[i][j]表示前i个物品中选j对的最小疲劳度。 则dp[i][j]可能含有第i个物品(这种情况下,第i种物品一定是和第i-1个物品配对), 则dp[i][j]=dp[i-2][j-1]+(val[i]-val[i-1])*(val[i]-val[i-1]) dp[i][j]的j对也可能不含有第i个物品,此时有 dp[i][j原创 2014-09-30 22:49:55 · 806 阅读 · 0 评论 -
hdu 1069 Monkey and Banana (dp)
//把给定的长方体(不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽都比下面长方体的长/*分析:因为每块积木最多有3个不同的底面和高度,因此先把每块积木看成三种不同的积木,每种积木只有一个底面和一个高度。n中类型的积木转化为3*n个不同的积木的叠加,对这3 * n个积木的长边从大到小排序;接下来的问题就是找到一个递减的子序列,使得子序列的高度和最大即可。数组dp:dp[i]表示是原创 2014-09-30 20:49:29 · 728 阅读 · 0 评论 -
poj 2096 Collecting Bugs (概率dp)
/*dp求期望逆着递推求解题意: 一个软件有s个子系统,会产生n种bug 某人一天发现一个bug,这个bug属于一个子系统,属于一个分类 每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n 问发现n种bug,每个子系统都发现bug的天数的期望。求解: dp[i][j]表示已经找到i种bug,j个系统的bug,达到目标状态的天数的期望原创 2014-10-09 19:46:50 · 763 阅读 · 0 评论 -
hdu 3076 ssworld VS DDD (概率dp)
///题意:/// A,B掷骰子,对于每一次点数大者胜,平为和,A先胜了m次A赢,B先胜了n次B赢。///p1表示a赢,p2表示b赢,p=1-p1-p2表示平局///a赢得概率 比一次p1 两次p0*p1 三次 p0^2*p1,即A赢的概率为p1+p*p1+p^2*p1+...p^n*p1,n->无穷///即a_win=p1/(1-p);b_win=p2/(1-p);///dp[i][j原创 2014-10-09 22:36:49 · 818 阅读 · 0 评论 -
hdu 4223 Dynamic Programming? (dp)
//连续的和的绝对值最小# include # include # include # include using namespace std;int main(){ int t,i,j,num,n,min1; int sum[1010],a[1010]; int cas=0; while(~scanf("%d",&t)) {原创 2014-10-01 21:42:07 · 1296 阅读 · 0 评论 -
hdu 3591The trouble of Xiaoqian (多重背包)
/*解题思路是:首先这个人有各种钱币,每种钱币若干,所以我们对这个人的钱用多重背包解决;再者是找钱的人,可以认为他们有各种各样的钱币,都是无限件,所以对于收银员进行完全背包处理;还有就是处理二者之间的关系 dp[i]表示支付i元钱至少多少张纸币,dp2[i-T]表示:收银员要找的钱的张数两者相加即是所需要的张数,然后取最小值:*/# include# include# i原创 2015-08-31 11:19:43 · 510 阅读 · 0 评论