容斥原理|组合数学|程序设计

文章讨论了容斥原理的应用,通过德摩根定律和数学归纳法解决关于整除特定数的问题,并将其与背包问题相结合,展示了将问题转换的思路。最后给出了一段C++代码示例来计算1-100中不被3,5,7整除的数个数。
摘要由CSDN通过智能技术生成

子曰.“人之过也,各于其党。

观过,斯知仁矣。”

孔子说:“人们所犯的错误,类型不一。所以观察一个人所犯错误的性质,就可以知道他的为人。”

容斥原理还有一种交的形式,我们可以使用德摩根定律得出来,

也可以使用数学归纳法证明。

求解在1-n中有多少个不满足整除某些数的个数。

并且和背包问题进行结合,体现转换问题的思想。

我们也可以使用归纳假设证明:

在1-100中,有多少个不被3,5,7整除的数?

我们要找到什么是性质,

#include <bits/stdc++.h>using namespace std;#define int long longconst int N=100010;int f[N];int c[10],d[10],tot,s;signed main(){  cin>>c[1]>>c[2]>>c[3]>>c[4];  int n;  cin>>n;  f[0]=1;  for(int i=1;i<=4;i++)  {    for(int j=c[i];j<=1e5;j++)    f[j]+=f[j-c[i]];  }  while(n--)  {    for(int i=1;i<=4;i++)    cin>>d[i];    cin>>s;    int ans=f[s];    for(int i=1;i<=15;i++)    {      int k=0;      int num=0;      for(int j=0;j<4;j++)      {        if(i>>j&1)        {          num++;          k+=c[j+1]*(d[j+1]+1);//如果已经选择d[j+1]+1个硬币        }      }      int f1=1;//枚举符号      if(num%2)f1=-1;      if(s>=k)      {        ans+=f1*f[s-k];      }    }    cout<<ans<<"\n";  }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值