摘要:
从今天开始,我就正式开始做dp专题了,还得先从最简单的入手,01背包问题是经典的dp问题,从杭电上找了几道题先练练手。。。。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546题意:如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。分析:要使卡上的余额最少,相当于用有限的金额去买最多的菜。而题目多了一个限制条件,就是“卡上的剩余金 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896题目大意:n个石头,每个在位置p,一个属性d。从最左边开始往右走,遇到一个石头,如果是第奇数次遇到,就把他往前仍d米,偶数次遇到就越过。问最后最远的石头距离起点多少米思路:考虑用优先队列,如果是第奇数个石头,就修改其位置,入队列,否则,出对列;View Code 1 #include<iostream> 2 #include<queue> 3 using namespace std; 4 5 struct Point{ 6 int pos; 7 int dis; 8 . 阅读全文
摘要:
最近数据结构实习,2天没做题了,真好今天又没课,还是继续上次的矩阵专题吧。。。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855我一直在把这个公式矩阵化,可是搞了老半天也出不了结果,后来看了别人的思路,顿时豁然开朗了。。。思路:斐波那契数列可以用矩阵来表示:mat={1,1,1,0},故f[n]=mat^n;而在组合数学中有(1+x)^n=,从而联想到令x=mat,1为单位矩阵;然后矩阵求幂就可以了;View Code 1 #include<iostream> 2 using namespace std; 3 int n,m; 4 阅读全文