当前位置: 代码迷 >> 综合 >> HDOJ FATE 二维DP
  详细解决方案

HDOJ FATE 二维DP

热度:60   发布时间:2024-01-20 20:38:59.0

一道很水的二维DP,但是对于DP没有什么感觉的我来说,真是辛苦了。

这么来。[疲劳值][怪物数量]=经验值。这样保存的当前疲劳值获取的最大经验者。

dp[i][j]=max( dp[i][j],dp[i-m_pl[k]][j-1]+m_exp[k] );

当经验值满足升级的条件就可以了。

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;int max( int a,int b ){ return a>b?a:b; }int main()
{int exp,pl,n,maxn;int dp[111][111];int mexp[111],mpl[111];while( scanf( "%d%d%d%d",&exp,&pl,&n,&maxn )!=EOF ){memset( dp,0,sizeof(dp) );for( int i=1;i<=n;i++ )scanf( "%d%d",&mexp[i],&mpl[i] );int i;for( i=1;i<=pl;i++ ){for( int j=1;j<=maxn;j++ )for( int k=1;k<=n;k++ )if( i>=mpl[k] )dp[i][j]=max( dp[i][j],dp[i-mpl[k]][j-1]+mexp[k] );if( dp[i][maxn]>=exp )break;}printf( "%d\n",pl-i );}return 0;
}