bzoj 1042: [HAOI2008]硬币购物
2014-02-01 17:05
239 查看
网上题解一搜一大把我就不献丑了,直接放代码吧
View Code
#include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std; #define N 100008 #define M 1008 long long S,F ,n,C[5],T,A[M][5]; void init() { for (int i = 1;i <= 4;i++) scanf("%d",&C[i]); F[0] = 1; scanf("%lld",&T); for (int i = 1;i <= T;i++) { for (int j = 1;j <= 4;j++) scanf("%d",&A[i][j]); scanf("%lld",&A[i][0]); S = max(S,A[i][0]); } } void DP() { for (int i = 1;i <= 4;i++) for (int j = 0;j <= S;j++) if (C[i]+j <= S) F[C[i]+j] += F[j]; } void work() { for (int i = 1;i <= T;i++) { long long ans = 0; long long S = A[i][0]; ans += F[S]; for (int j = 1;j <= 4;j++) if (S - (A[i][j]+1)*C[j] >= 0) { ans -= F[S - (A[i][j]+1)*C[j]]; for (int k = j+1;k <= 4;k++) if (S - (A[i][j]+1)*C[j] - (A[i][k]+1)*C[k] >= 0) { ans += F[S - (A[i][j]+1)*C[j] - (A[i][k]+1)*C[k]]; for (int l = k+1;l <= 4;l++) if (S - (A[i][j]+1)*C[j] - (A[i][k]+1)*C[k] - (A[i][l]+1)*C[l] >= 0) { ans -= F[S - (A[i][j]+1)*C[j] - (A[i][k]+1)*C[k] - (A[i][l]+1)*C[l]]; for (int m = l+1;m <= 4;m++) if (S - (A[i][j]+1)*C[j] - (A[i][k]+1)*C[k] - (A[i][l]+1)*C[l] - (A[i][m]+1)*C[m] >= 0) ans +=F[S - A[i][j]+1*C[j] - (A[i][k]+1)*C[k] - (A[i][l]+1)*C[l] - (A[i][m]+1)*C[m]]; } } } printf("%lld\n",ans); } } int main() { init(); DP(); work(); return 0; }
View Code
相关文章推荐
- BZOJ1042: [HAOI2008]硬币购物
- BZOJ1042: [HAOI2008]硬币购物
- [BZOJ1042] [HAOI2008]硬币购物
- BZOJ 1042 [HAOI2008]硬币购物
- BZOJ 1042:[HAOI2008]硬币购物(容斥原理+DP)
- 【bzoj1042】[HAOI2008]硬币购物
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
- [bzoj1042][HAOI2008]硬币购物
- BZOJ1042 [HAOI2008]硬币购物
- bzoj1042【HAOI2008】硬币购物
- bzoj1042 [HAOI2008]硬币购物
- BZOJ 1042: [HAOI2008]硬币购物 DP,与处理,容斥
- BZOJ1042: [HAOI2008]硬币购物
- [BZOJ1042][HAOI2008]硬币购物 (DP+容斥原理)
- BZOJ 1042: [HAOI2008]硬币购物
- 【bzoj1042】[HAOI2008]硬币购物【dp预处理+容斥】
- [BZOJ1042][HAOI2008]硬币购物
- [BZOJ1042]HAOI2008硬币购物|DP|容斥原理
- BZOJ 1042 HAOI 2008 硬币购物 容斥原理
- Bzoj1042 [HAOI2008]硬币购物