p1164小A点菜

            小A点菜

  传送门



这题真的没思路

01背包+加法

a[x]表示花x元的方案数目

状态转移方程

a[j]+=a[j-v[i]];

千万别忘了赋初值!!!

附代码



 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int n,m;
 5 int v[101000];
 6 int a[100001];
 7 int main()
 8 {
 9     int ans=0;
10     scanf("%d%d",&n,&m);
11     for(int i=1;i<=n;++i)
12     {
13         scanf("%d",&v[i]);
14     }
15     a[0]=1;//千万别忘了赋初值!!!
16     for(int i=1;i<=n;++i)
17     {
18         for(int j=m;j>=v[i];j--)
19         {
20             a[j]+=a[j-v[i]];
21         }
22     }
23     cout<<a[m];
24     return 0;
25 } 
原文地址:https://www.cnblogs.com/dsrdsr/p/8909333.html