口袋容积为m,有n件物品,主题体积为a1、a2、a3…an。 装满m有几种不同的装法?
递归: intDFS(intn,int m )/*n个物品中总体积为m的选择方法()/{if ) m==0) return 1; if(n=0)返回0; returnDFS(n-1,m ) ) m=a[n]? DFS(n-1,m-a[n] ) :0 ); /*可记忆递归*/}递归: DP[I][j]=DP[I-1][j](j=a[I]? dp[i-1][j-a[i]]:0; 初始条件: dp[i][0]=1; (0=i=n )/*不全选() /递归) )可以转换为存储递归) # include bits/stdc.husingnamespacestd; int a[100]; int dp[100][100]={0}; int main () { int n,m; cinnm; dp[0][0]=1; for(intI=1; i=n; I ) { cina[i]; dp[i][0]=1; }for(intI=1; i=n; I ) for(intj=0; j=m; j({DP[I][j]=DP[I-1][j] ) j=a[I]? dp[i-1][j-a[i]]:0; } } coutdp[n][m]endl; 返回0; )递归) include bits/stdc.husingnamespacestd; int a[100]; intDFS(intn,int m ) if ) m==0) return 1; if(n=0)返回0; returnDFS(n-1,m ) ) m=a[n]? DFS(n-1,m-a[n] ) :0 ); (}int main ) ) { int n,m; cinnm; for(intI=1; i=n; I ) { cina[i]; }coutDFS(n,m ) endl; 返回0; }