求助
查看原帖
求助
302569
Beyond_Problem楼主2021/5/9 11:07

为什么会过不了样例,是因为卡数会在后面影响这个空吗

#include <iostream>
#include <algorithm>
#include <cstdio>
#define MAXV 360
using namespace std;

//rt
int n, m;
int numap [ MAXV];
int ans = 0;

//dp
struct dpdpdp
{
    int num;

    int numcard [ 5];

    int last;
}dp [ MAXV];

//main
int main ( )
{
    //sr
    cin>> n>> m;
    for ( int i = 1; i <= n; i ++)
    {
        cin>> numap [ i];
    }
    for ( int i = 1; i <= m; i ++)
    {
        int qwq;
        cin>> qwq;

        dp [ 1]. numcard [ qwq ]++;
    }

    //dp
    dp [ 1]. num = numap [ 1];
    for ( int i = 1; i <= n - 1; i ++)
    {
        for ( int j = 1; j <= 4; j ++)
        {
            if ( n - i >= j && dp [ i]. numcard [ j] > 0 )
            {
                if ( dp [ i + j]. num < dp [ i]. num + numap [ i + j])
                {
                    dp [ i + j] = dp [ i];
                    dp [ i + j]. num += numap [ i + j];
                    dp [ i + j]. numcard [ j] --;
                    dp [ i + j]. last = i;
                }
            }
        }
    }

    //sc
    for ( int i = 1; i <= n; i ++)
    {
        printf ( "%3d%5d%5d", i, dp [ i]. num, numap [ i]);
        printf ( "%5d%3d%3d%3d%5d\n", dp [ i]. numcard [ 1], dp [ i]. numcard [ 2], dp [ i]. numcard [ 3], dp [ i]. numcard [ 4], dp [ i]. last);
    }
    printf ( "%d\n", dp [ n]. num);

    return 0;

}

2021/5/9 11:07
加载中...