DP_递推/计数
亚N程
这个作者很懒,什么都没留下…
展开
-
URAL:1017 Staircases
01背包计数问题。 这类问题非常经典,很多问题都可以转化为背包类的计数问题。 #include #include #include #include #include #include #define ll long long #define INF 2139062143 #define MAXN 100005 using namespace std; ll d原创 2014-02-25 22:40:17 · 584 阅读 · 0 评论 -
UVa:1394 And Then There Was One
约瑟夫环问题。 最后一个删除的编号,递推公式是f【n】=(f【n-1】+k)%n。网上多数对这个公式说的不太清楚。 假设编号从0开始到n-1。编号从0开始,我们很好求删掉的第k个元素,那么第一次删除了编号是k-1的数。为了方便求第二次删除的数,把剩下的数字重新编号,即从编号是k的元素开始,令它为0,这样把剩下的n-1个数字重新编号了。这里重新编号以后的下标和之前是有一个对应关系的,即x‘=(x原创 2014-02-09 14:21:43 · 701 阅读 · 0 评论 -
UVa:10910 Marks Distribution
一开始感觉可以用计数类的dp,但是自己推了推发现了个规律,于是写了一个。。。 不知道为什么只有1门课而且P小于T的时候是1为什么不是0。。(后来发现了,P是及格线,T是它的得分,问的是有多少种可能。。) 后来在网上看见果然可以用计数类的dp来递推: 首先问题可以转换成用i个数,组成和为j的种类,dp[i][j]。然后状态转移方程dp[i][j] = dp[i - 1][j] + dp[i][原创 2014-01-30 20:54:52 · 727 阅读 · 0 评论 -
HDU:4651 Partition
经典的整数划分问题。 使用O(n^2)的办法必超时。 用这个公式可以递推出来。 注意n-k*(3*k-1)/2>=0,n-k*(3*k+1)/2>=0。 #include #include #include #include #include #include #include #include #include #define ll long lo原创 2014-02-27 19:41:16 · 717 阅读 · 0 评论 -
UVa:10759 Dice Throwing
简单递推。注意pow这个函数要求参数是double类型的,否则会出错。 #include #include #include #include #include #include #include #include #define ll long long #define INF 2139062143 #define MAXN 5000000 //ios::原创 2014-02-02 18:19:22 · 602 阅读 · 0 评论 -
UVa:10313 Pay the Price
完全背包计数。 这里L1,L2可能会大于N。如果L2大于N,那么L2就当N处理就行了。如果L1大于N,那么肯定是0. 注意这里0元本身是一种情况,需要支付0个硬币。 用longlong。 #include #include #include #include #include #include #include #include #include #include #d原创 2014-03-20 12:34:35 · 722 阅读 · 0 评论 -
UVa:1452 Jump
约瑟夫环。 只要理解了用数学办法O(n)的思路求约瑟夫环最后一个元素的算法即可。 在只求最后一个元素的时候,我们每次删除元素都进行了重新编号,新编号与旧编号有一个对应关系,即f【i】=(f【i-1】+k)%i,这里f【i】表示重新编号之后该元素的编号,f【i】表示旧编号。这样很清楚最后一次删除的必定是0号元素(假设编号从0到n-1),这样利用这个关系可以推出原始序列中这个元素的编号。同理,在倒原创 2014-03-04 08:26:33 · 709 阅读 · 0 评论