洛谷P1164 小A点菜(01背包 计数问题)
作者:互联网
P1164 小A点菜
题目描述
餐馆里有N种菜,每种菜价钱为ai,小A口袋里仅剩M元,需要将M元全部花光,共有多少种点菜方案;
输入格式
第一行是两个数字,表示N和M。(N<=100,M<=10000)
第二行起N个正数ai(可以有相同的数字,每个数字均在1000以内)。
输出格式
一个正整数,表示点菜方案数,保证答案的范围在int之内。
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { int N,M,a[105],dp[10005]; memset(dp,0,sizeof(0)); dp[0]=1;//不点菜时也算一种方案; cin>>N>>M; for(int i=0;i<N;i++) cin>>a[i]; sort(a,a+N); for(int i=0;i<N;i++) for(int j=M;j>=a[i];j--)//01背包问题要逆序遍历; { dp[j]+=dp[j-a[i]]; } cout<<dp[M]; return 0; }
标签:01,洛谷,int,P1164,ai,点菜,include,dp 来源: https://www.cnblogs.com/xuanzo/p/12200638.html