bzoj 1042 硬币购物
2015-11-16 10:38
155 查看
预处理+1,-1容斥即可,还是想不明白spring为什么要×组合数
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define md #define ll long long #define inf (int) 1e9 #define eps 1e-8 #define N 100010 #define mxn 100000 using namespace std; ll f ,ans=0; ll w[4],hv[4]; int s; void dp() { f[0]=1; for (int i=0;i<=3;i++) for (int j=w[i];j<=mxn;j++) f[j]+=f[j-w[i]]; } ll solve(int opt) { ll sum=0; for (int i=0;i<=3;i++) if (opt&(1<<i)) sum+=w[i]*(hv[i]+1); if (sum>s) return 0; return f[s-sum]; } ll bit(int opt) { int sum=0; for (int i=0;i<=3;i++) sum+=(opt>>i)&1; return sum; } int main() { int pos; scanf("%lld%lld%lld%lld%d",&w[0],&w[1],&w[2],&w[3],&pos); dp(); for (int i=1;i<=pos;i++) { ans=0; scanf("%lld%lld%lld%lld%lld",&hv[0],&hv[1],&hv[2],&hv[3],&s); for (int j=0;j<=15;j++) if (bit(j)&1) ans-=solve(j); else ans+=solve(j); printf("%lld\n",ans); } return 0; }
相关文章推荐
- bzoj 2563 阿狸和桃子的游戏
- bzoj 1853 幸运数字
- bzoj 3620 似乎在梦中见过的样子
- bzoj 3916 friends | 字符串hash
- bzoj 1047 理想的正方形
- bzoj 3918 postman
- bzoj 3098 hash killer
- bzoj 1875 HH去散步
- bzoj 3679 数字之积
- bzoj 屯题计划 完结
- bzoj 3503 和谐矩阵
- bzoj 2242 计算器
- bzoj 2597 石头剪刀布
- bzoj 3532 lis
- bzoj 3130 费用流
- bzoj 1500 维修数列 bzoj 1507 editor
- bzoj 1251 序列终结者
- bzoj 4152 the camptin (dis[x][y]=min(|x.x-y.x|,|x.y-y.y|),求1,n最短路)
- bzoj 3029 守卫者的挑战
- bzoj 2118 墨墨的等式