poj 1837 blance (01背包)
题意 : 有一个特俗的天平
c 个指定的位置 g个给定重量的砝码
问用上所有砝码 使天平平衡的方案有几种
思路:
dp[i][j+c[k]*g[i]]+=dp[i-1][j];
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int dp[30][20000]; int c[30],g[30]; int main() { int cc,gg; int i,j,k; while(scanf("%d%d",&cc,&gg)!=EOF) { for(i=1;i<=cc;i++) scanf("%d",&c[i]); for(i=1;i<=gg;i++) scanf("%d",&g[i]); memset(dp,0,sizeof(dp)); dp[0][7500]=1; for(i=1;i<=gg;i++) { for(j=0;j<=15000;j++) { if(dp[i-1][j]!=0) { for(k=1;k<=cc;k++) { dp[i][j+c[k]*g[i]]+=dp[i-1][j]; } } } } printf("%d\n",dp[gg][7500]); } return 0; }