#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n,tot; const int N = 10; int dp[1010]; int w[N],v[N]; int p[1010][N]; int output[N]; void dfs(int idx,int s,int k) { if(s <= 0) { for(int i=k-1;i>=0;i--) { cout << output[i] << " "; } cout << endl << endl; return; } if(p[s][idx] == 0) { dfs(idx-1,s,k); } else if(p[s][idx] == 1) { output[k] = idx; dfs(idx-1,s-w[idx],k+1); } else if(p[s][idx] == 2) { output[k] = idx; dfs(idx-1,s-w[idx],k+1); dfs(idx-1,s,k); } } int main() { scanf("%d%d",&n,&tot); memset(dp,0,sizeof(dp)); memset(p,-1,sizeof(p)); for(int i=0;i=w[i];j--) { if(dp[j] > dp[j-w[i]]+v[i]) { p[j][i] = 0; } else if(dp[j] < dp[j-w[i]] + v[i]) { p[j][i] = 1; dp[j] = dp[j-w[i]] + v[i]; } else { p[j][i] = 2; } } } cout << tot << endl; dfs(n-1,tot,0); //while(1); return 0; }