HDU 2152 —— Fruit

来源:互联网 发布:b2b 知乎 编辑:程序博客网 时间:2024/06/06 20:11

原题:http://acm.hdu.edu.cn/showproblem.php?pid=2152

修改一下左右的边界范围


#include <iostream>#include <cstring>#include <string>using namespace std;const int maxn = 110;int a[110][2];int dp[maxn*maxn], tmp[maxn*maxn];int n, m;int main(){    while(cin>>n>>m){        int sum = 0;        for(int i = 0;i<n;i++){            cin>>a[i][0]>>a[i][1];            sum += a[i][0];        }        if(m < sum){            cout<<"0"<<endl;            continue;        }        memset(dp, 0, sizeof dp);        memset(tmp, 0, sizeof tmp);        for(int i = a[0][0];i<=a[0][1];i++)            dp[i] = 1;        int minn = a[0][0];        for(int i = 1;i<n;i++){            for(int j = minn; j<=m;j++){                for(int k = a[i][0];k+j<=m,k<=a[i][1];k++){                    tmp[k+j] += dp[j];                }            }            minn += a[i][0];            memcpy(dp, tmp, sizeof tmp);            memset(tmp, 0, sizeof tmp);        }        cout<<dp[m]<<endl;    }    return 0;}


0 0