【POJ1837】Balance,带负体积状态的01背包,水题
2014-09-22 09:51
435 查看
天平上有若干钩子,你在上面放砝码使它平衡,求有多少种方法。
状态怎么转移,状态是什么不赘述了,只是记得把状态往后推推,别因为负状态RE就好了。
比如需要用到f[-2],f[-1],f[0],f[1],f[2],那么就把他们变成f[1~5],然后用的时候f[i]写成f[3+i]就好了!
贴代码,不懂自己看!
复制去Google翻译翻译结果
状态怎么转移,状态是什么不赘述了,只是记得把状态往后推推,别因为负状态RE就好了。
比如需要用到f[-2],f[-1],f[0],f[1],f[2],那么就把他们变成f[1~5],然后用的时候f[i]写成f[3+i]就好了!
贴代码,不懂自己看!
#include <cstdio> #include <cstring> #include <algorithm> #define N 25 #define M 6000 #define inf 0x3f3f3f3f using namespace std; int n,m; int a ,b ,f [M<<1]; int A1,A2,A,B; int main() { // freopen("test.in","r",stdin); int i,j,k; scanf("%d%d",&n,&m); A1=inf;A2=-inf;B=0; for(i=1;i<=n;i++)scanf("%d",&a[i]),A1=min(A1,a[i]),A2=max(A2,a[i]); for(i=1;i<=m;i++)scanf("%d",&b[i]),B+=b[i]; A=max(-A1,A2); A*=B; f[0][M]=1; for(i=1;i<=m;i++)for(j=1;j<=n;j++) { for(k=M-A;k<=M+A;k++) { f[i][k]+=f[i-1][k-a[j]*b[i]]; } } printf("%d\n",f[m][M]); return 0; }
复制去Google翻译翻译结果
相关文章推荐
- poj1837--01背包
- HDU 1171【01背包水题】
- POJ 1837 Balance(01背包变型)
- [背包]poj1837 Balance
- 解题报告:POJ_2923 Relocation 状态压缩+01背包
- poj1837 01背包类型计数
- hdu 1203 01背包变形。。。一道很诡异的水题。。
- POJ1837 Balance[分组背包]
- POJ 1837 Balance(01背包变形, 枚举DP)
- poj 1837 Balance (01背包变形)
- POJ 1837 Balance(01背包 动态规划)
- HDU 1171 Big Event in HDU (由01背包演变的水题)
- Investment (水题)完全背包加状态压缩--不然会TlE
- POJ 3624 _01 背包水题!
- POJ 1837 Balance 类似01背包
- (POJ1837)Balance <01背包变形经典题>
- (NYoj 289)苹果 --01背包水题
- 01背包问题-状态d[i][j],f[i][j],滚动数组--java实现
- HDU 2546饭卡 【01背包水题】
- poj 2923 状态压缩 + 01背包