洛谷p1164小A點菜
阿新 • • 發佈:2019-01-22
題目描述
不過uim
由於買了一些輔(man)輔(hua)書
,口袋裡只剩 MM 元 (M \le 10000)(M≤10000) 。
餐館雖低端,但是菜品種類不少,有 NN 種 (N \le 100)(N≤100) ,第 ii 種賣 a_iai 元 (a_i \le 1000)(ai≤1000) 。由於是很低端的餐館,所以每種菜只有一份。
小A
奉行“不把錢吃光不罷休”,所以他點單一定剛好吧uim
身上所有錢花完。他想知道有多少種點菜方法。
由於小A
肚子太餓,所以最多隻能等待 11 秒。
此題可以用dfs做,
#include <cstdio> using namespace std; int a[101],book[101],n,m,sum=0; void dfs(int money,int step) { if(money>m)//錢用完了 { return; } if(money==m) { sum++; //可以 return; } for(int i=step+1;i<=n;i++) { if(book[i]==0) { book[i]=1; //book[i]紀錄 dfs(money+a[i],i); book[i]=0; //還原 } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } dfs(0,0); printf("%d",sum); return 0; }