P7381 [COCI2018-2019#6] Sličice[普及+提高】DP

[COCI2018-2019#6] Sličice - 洛谷

难度应该是评错了,而且题干样例解释也不对,应该是一道黄题。

设dp[i][j]为前i个选择j时的最大值,本次可以一个不选也可以选择j个,注意别超越m的界限即可

#include
#include
#include
# define mod 1000000007
using namespace std;
typedef long long int ll;

int dp[1010][1010];
int b[1010];
int a[1010];

int main()
{

   int n,m,k;
   cin>>n>>m>>k;


   for(int i=1;i<=n;i++)
   {
       cin>>a[i];
   }

   for(int i=0;i<=m;i++)
   {
       cin>>b[i];



   }

   for(int i=1;i<=n;i++)
   {
       dp[i][0]=b[a[i]];
   }

   for(int i=1;i<=n;i++)
   {
       for(int j=0;j<=k;j++)
       {
           for(int kk=0;kk<=j&&a[i]+kk<=m;kk++)
           {
               dp[i][j]=max(dp[i][j],dp[i-1][j-kk]+b[a[i]+kk]);

           }
       }
   }

   cout<

你可能感兴趣的:(动态规划,NOIP)