先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ------------------------------------------------------------------------ #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; const int maxn = 1…
设f[i]为凑i元的方案数,这个随便dp一下就行了 然后处理限制,我们考虑用容斥,也就是4个超限-3个超限+2个超限-1个超限,这里用状压枚举一下,然后i硬币超限就当做选了d[i]+1个,在s里减去,最后用来容斥的就是f[s'] #include<iostream> #include<cstdio> using namespace std; const long long N=100005; long long c[10],T,d[10],s,f[N],ans; long long…