本来写的搜索就是最后一个点过不去,然后改成题解的思路之后还是过不去,我是没学过dp的所以我猜测我把dp又写成搜索了,但是我也看不出和dp的区别是什么,因为思路都是前n道菜用m块钱的种类。求大佬帮忙看看。
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;i++)
using ll= long long int;
int N,M;
vector<vector<int>> dpmap(101,vector<int>(10001));
vector<int> price(101);
int dp(int n,int m){
if(!m)return 1;
if(!n)return 0;
if(dpmap[n][m]) return dpmap[n][m];
if(m-price[n]>=0) return dpmap[n][m]=dp(n-1,m-price[n])+dp(n-1,m);
else return dpmap[n][m]=dp(n-1,m);
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>N>>M;
rep(i,1,N)cin>>price[i];
cout<<dp(N,M);
}