这里吐槽下 tvvj的机子
思考
以样例为例:
4 4
1 1 2 2
读入第一个数字 1只能组成1
读入第二个数字 1,1可以在 第一种情况的基础上 组成2
读入第三个数字 1,1,2可以在第一种情况和第一种情况上 组成 3,4
读入第四个数字 1,1,2,2可以在第一种情况第二种情况和第三种情况下 组成 3,4,5,6
所以dp[n]表示 组成n的方法数。
代码实现并不难,但是需要好好思考。


#include <cstdio> int dp[10005],n,m; int main(){ scanf("%d%d",&n,&m); dp[0]=1; for(int i=1;i<=n;i++){ int x; scanf("%d",&x); for(int j=m;j>=x;j--){ dp[j] += dp[j-x]; } } printf("%d",dp[m]); return 0; }