题意观察样例与提示即可。
挺水的 DP 题,DP 刷的比较少。。
#include<iostream> #include<algorithm> #include<string> #include<sstream> #include<cstdio> #include<cstring> #include<vector> #include<cmath> using namespace std; long long a[105], dp[10005]; int main(){ int T; scanf("%d", &T); while(T--){ memset(dp, 0, sizeof(dp)); int n, m, k; dp[0] =1; scanf("%d %d %d", &n, &m, &k); for(int i = 1; i <= n; i++){ scanf("%I64d", &a[i]); } for(int i = 1; i <= n; i++){ for(int j = m; j >= a[i]; j--){ dp[j] += dp[j-a[i]]; } if(dp[m] >= k) break; } if(dp[m] >= k) cout << "ENOUGH" << endl; else cout << dp[m] << endl; } return 0; }