HDU 4504

来源:互联网 发布:mac文件复制到移动硬盘 编辑:程序博客网 时间:2024/06/15 02:59

昨天晚上腾讯马拉松编程的第一场比赛的最后一题:

昨天晚上没能做出来,看上去感觉是背包不错。但是想破头皮都没有想出来。今天上午发现已经有解题报告了,看了解题报告才知道原来这种算法叫做背包最优方案数。不枉做了一晚上啊,总算是有点收获了。

下面是我AC的代码。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){    int A, B, t;    long long f[2][205];    while(scanf("%d%d%d", &A, &B, &t) != EOF)    {        memset(f, 0, sizeof(f));        int r = t / 15;        int mid = r / 2;        r -= mid;        B += mid;        int sub = B - A;        bool k = 0;        f[0][0] = 1;        for(int i = 1; i <= r; ++i)        {            for(int j = i - 1; j <= (i - 1) * 3; ++j)            {                if(f[k][j])                {                    f[k ^ 1][j + 1] += f[k][j];                    f[k ^ 1][j + 2] += f[k][j];                    f[k ^ 1][j + 3] += f[k][j];                }            }            memset(f[k], 0, sizeof(int) * 205);            k ^= 1;        }        long long ans = 0;        for(int j = max(r, sub + 1); j <= 3 * r; ++j)            ans += f[k][j];        cout << ans << endl;    }    return 0;}


原创粉丝点击