很容易发现是个dp,设计状态,dp[i][j]表示前i个数和为j的情况存不存在。存在就是1,不存在就是0,一开始再想能不能压成一维,其实是不可以的,因为最后要求的是n个数的和,如果压成一维就没办法确保是n个数的和了。 #include<bits/stdc++.h> using namespace std; int n,y; int a[100010],b[100010]; bool dp[100010][110];//表示前i个数里和为j时,二维dp { cin>>n>>y; for(int i=1;i<=n;i++) { ...