题解 P1855 【榨取kkksc03】

尽管说这是站长大人出的题,但确实很简单。->_->

这就是一个二维背包费用问题,用dp[i][j]表示当钱为i,时间为j时能最大满足愿望数量;

那么状态转移方程为:dp[j][k]=max(dp[j][k],dp[j-mon[i]][k-tim[i]]+1);

CODE

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=205;
int dp[N][N],n,m,summ,sumt,mon[N],tim[N];
int main()
{
    scanf("%d%d%d",&n,&summ,&sumt);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&mon[i],&tim[i]);
    }
    for(int i=1;i<=n;i++)
    for(int j=summ;j>=mon[i];j--)
    for(int k=sumt;k>=tim[i];k--)
    {
        dp[j][k]=max(dp[j][k],dp[j-mon[i]][k-tim[i]]+1);//状态转移方程
    }
    printf("%d",dp[summ][sumt]);
}
发布了11 篇原创文章 · 获赞 3 · 访问量 773

猜你喜欢

转载自blog.csdn.net/steve95/article/details/104215694