zoukankan      html  css  js  c++  java
  • 回档|分苹果

    背景:今晚在tyvj参加了一下比赛,没想到可耻的跪了。第一题地球人都知道spfa,结果我写了个坐标类DP还得了30分……悲剧。唯一欣慰的是我用组合数学做出了第二题,奠定了我们学校有五个人冲进前六的基础。先发第二题好了。

     

    题目:由于tyvj比较坑,比赛的题目竟然没了!只能说下大体意思。给定n个苹果,要求分到3个袋子中。袋子是无序的,问有多少种情况,并对k取模。

     

    输入解释:第一行,输入两个整数n,k

    输出解释:输出只有一行,即方案总数对k取模的结果。

    输入样例: 11 10000

    输出样例: 9525

     

    题目分析:

           很明显,每个苹果有三种可能,即放在1,2,3号袋子中。于是n个苹果的总数就是3^n。

           我们不妨利用容斥原理对所有情况进行分类讨论:

           (1)当有两个袋子为0时。那么就会有0,0,全部;0,全部,0;全部,0,0三种情况。显然这应算是一种情况。之所以算是三种而不是六种(见下),是 因为当我们把全部苹果放入一个袋子时,显然与放置一个苹果是等价的。那么对于一个苹果,无疑只有一种情况。

           (2)对于剩余情况,我们不妨把三个袋子按苹果多少排序。例如1,2,3。显然这组数字有六种不同的顺序。也就是我们说得普通情况。

            因此我们可以得到公式:ans=(3^n-3)/6+1。事实上运用除法逆元还可以进一步简化,请同学们自行思考。(解释都到这里了,源代码就不用发了吧?事实上是代码被tyvj吞了……)

  • 相关阅读:
    关于sizeof表达式作为数组元素个数的编译
    【deque】滑动窗口、双端队列解决数组问题
    【二叉树】重建二叉树
    字符数组与字符串指针
    【STL】C中的qsort与C++中的sort
    对C++不是类型安全语言的理解
    【vector】创建一个二维vector当作二维数组用
    批量处理改变文件名、文件后缀名
    位运算
    关于sqlserver帐号被禁用问题
  • 原文地址:https://www.cnblogs.com/Shymuel/p/4393550.html
Copyright © 2011-2022 走看看