子曰.“人之过也,各于其党。
观过,斯知仁矣。”
孔子说:“人们所犯的错误,类型不一。所以观察一个人所犯错误的性质,就可以知道他的为人。”
容斥原理还有一种交的形式,我们可以使用德摩根定律得出来,
也可以使用数学归纳法证明。
求解在1-n中有多少个不满足整除某些数的个数。
并且和背包问题进行结合,体现转换问题的思想。
我们也可以使用归纳假设证明:
在1-100中,有多少个不被3,5,7整除的数?
我们要找到什么是性质,
#include <bits/stdc++.h>
using namespace std;
#define int long long
const 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";
}
}