CF 189 A Cut Ribbon

来源:互联网 发布:清华体验知乎 编辑:程序博客网 时间:2024/06/08 13:18

简单dp。。。由于切割后没块必须是a b c中一个,所以注意状态转移时前一个状态必须是可到达的(f[i] != 0)。。。

#include<iostream>#include<cstring>using namespace std;int n, a, b, c;int f[4444];int main(){    while(cin>>n>>a>>b>>c)    {        memset(f, 0, sizeof(f));        f[a] = f[b] = f[c] = 1;        for(int i=1; i<=n; i++)        {            if(i > a && f[i-a])   f[i] = max(f[i], f[i-a] + 1);            if(i > b && f[i-b])   f[i] = max(f[i], f[i-b] + 1);            if(i > c && f[i-c])   f[i] = max(f[i], f[i-c] + 1);        }        cout<<f[n]<<endl;    }    return 0;}


原创粉丝点击