为什么会过不了样例,是因为卡数会在后面影响这个空吗
#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;
}