关于我对dp公式的笔记

首先上代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<cmath>
using namespace std;
int meme[5009];//用于存储解决第i个知识点所需要的时间
int kl[2][5009];//0存储问题编号并且被转换成解决时间,1存储解决奖励
int dp[5009][5009];//x代表已用去的时间,y代表 解决了y道题
int main()
{
int wek,lw,xl,sum;
cin>>wek>>lw;
int tpime=lw/wek;

int m,n;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
   cin>>meme[i];
   meme[i]*=tpime;
}

for(int i=1;i<=m;i++)
{
   cin>>kl[0][i]>>kl[1][i];
   kl[0][i]=meme[kl[0][i]];
}

cin>>sum;

for(int i=1;i<=m;i++)
{
    for(int j=sum;j>=0;j--)//该状态下的剩余时间
    {
      if(j>=kl[0][i])//如果剩余时间允许
     {
      dp[i][j]=max(dp[i-1][j],dp[i-1][j-kl[0][i]]+kl[1][i]);//就像夺宝奇兵那道,由不选择 或者选择了两种转台选择
      }
     else
     dp[i][j]=dp[i-1][j];
      printf("%-4d",dp[i][j]);
}
     cout<<endl;
}
for(int i=0;i<=m;i++)
{
for(int j=0;j<=sum;j++)
printf("%-4d",dp[i][j]);
cout<<endl;
}

cout<<dp[m][sum]<<endl;
return 0;
}

 

原题地址:P2430 严酷的训练 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

结果与打表图

 

posted on 2022-03-17 13:02  zesure  阅读(43)  评论(0编辑  收藏  举报

导航