有个疑问求助下彭于晏
  • 板块P1164 小A点菜
  • 楼主hdh1103
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/22 13:55
  • 上次更新2024/3/22 17:35:53
查看原帖
有个疑问求助下彭于晏
1290314
hdh1103楼主2024/3/22 13:55
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
#define ll long long
//ll a[1][200005] = {0};
ll a[205]= {0};
//int c[32] = {0};
ll f[10005][10005]= {0};
ll n,m;
//ll sum = 0;

int main()
{
    ll m,n;
    cin>>n>>m;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
    }
    //行归0
    for(ll i=0;i<=m;i++){
        f[0][i]=0;
    }

    for(ll i=0;i<=n;i++){
        f[i][0]=0;
    }

    //f[0][0]=1;
    for(ll i=1;i<=n;i++){
        ll sum=0;
        for(int k=1;k<=i;k++){
            sum+=a[i];
        }
        for(ll j=1;j<=sum;j++){
            //带的钱够
            if(j>=a[i]){
                //选
                f[i][j]=f[i-1][j-a[i]]+f[i-1][j];
                //不选
              //  f[i][j]+=f[i-1][j];
                if(j-a[i]==0) f[i][j]++;
            }else{
                f[i][j] = f[i-1][j];
            }

        }
    }

        for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            cout<<f[i][j]<<" ";
        }
        cout<<endl;
    }

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

这里很奇怪,我j<=m就对了,但是很不能理解就是我遍历到sum不就行了吗,我前面全部加起来都没j大,怎么可能填的满j,好奇怪

2024/3/22 13:55
加载中...