您的位置:首页 > 其它

2016SDAU课程练习三1007

2016-05-30 22:47 281 查看
1.题目编号:1007

2.简单题意:多重背包问题

3.解题思路形成:0 1 2 3 4 5 6 7 8 9 10然后套路

4.感想:不懂,,,抄的

5.AC代码:

# include <iostream>

# include <cstdio>

# include <cstring>

using namespace std;

int dp[100005][15];

int Max(int x, int y)

{

 return x>y?x:y;

}

int main ()

{

    int n;

    while (scanf("%d", &n) != EOF)

    {

        if(n == 0)

        break;

        memset(dp, 0, sizeof(dp));

        int x, t, maxt = -1;

        for (int i = 1; i <= n; i++)

        {

            scanf("%d%d", &x, &t);

            if(maxt < t)

                maxt = t;

            dp[t][x + 1]++;

        }

        for (int i = maxt; i >= 0; i--)

        {

            for (int j = 1; j <= 11; j++)

            {

                dp[i][j] += Max(Max(dp[i + 1][j - 1], dp[i + 1][j + 1]), dp[i + 1][j]);

            }

        }

        printf("%d\n", dp[0][6]);

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: