P1164 小A点菜 简单dp

P1164 小A点菜 简单dp_第1张图片

基础动态规划

#include 
using namespace std;
//n表示菜道总数,m表示钱的总数;

int n,m;
int a[1010];

//f[i][j]表示前i道菜用光j元钱道办法总数;

int f[1010][1010];

int main(){
    cin >> n >> m;
    for (int i = 1; i <= n; i++){
        cin >> a[i];
    }

    for (int i = 1; i <= n; i ++){
        for (int j = 1; j <= m; j ++){
            if (j == a[i]){
                f[i][j] = f[i-1][j] + 1;
            } else if (j > a[i]){
                f[i][j] = f[i-1][j] + f[i-1][j - a[i]];
            } else if (j < a[i]){
                f[i][j] = f[i-1][j];
            }
        }
    }

    cout << f[n][m] << endl;
    return 0;
}

你可能感兴趣的:(动态规划)