POJ1837

思路 :递推 f[i,j]为前i个砝码能达到两边重量之和为j的方法数,以此递推可得:

f[i,j+w[i]*l[k]]=f[i,j+w[i]*l[k]]+f[i-1,j]

附上源代码:

 package poj; import java.util.Scanner; public class poj1837{ public static void main(String args[]){ Scanner in = new Scanner(System.in); int c=in.nextInt(); int g=in.nextInt(); int max=15000; while(c!=0&&g!=0){ int a[]=new int [c+1]; for(int i=1;i<=c;i++){ a[i]=in.nextInt(); } int b[]=new int [g+1]; for(int i=1;i<=g;i++){ b[i]=in.nextInt(); } //dp f[i][j+ai*bj]+=f[i-1][k] int f[][]=new int [g+1][max]; f[0][7500]=1; for(int i=1;i<=g;i++){ for(int j=1;j<=c;j++){ int v=b[i]*a[j]; for(int k=0;k<max;k++){ if(f[i-1][k]!=0){ f[i][v+k]+=f[i-1][k]; } } } } System.out.println(f[g][7500]); c=in.nextInt(); g=in.nextInt(); } } }

你可能感兴趣的:(c,String,Class)