本地正常,提交CE
  • 板块学术版
  • 楼主houluyu
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/8/22 21:28
  • 上次更新2023/11/3 01:53:04
查看原帖
本地正常,提交CE
690243
houluyu楼主2023/8/22 21:28

P1509 找啊找啊找GF

#include<iostream>
#include<cstring>
using namespace std;
const int N=100;
int n,m,r;
int rmb[N+5],rp[N+5],time[N+5]; 
int dp1[N+5][N+5],dp2[N+5][N+5];//dp1[i][j]不超过i,j最大数量   dp2不超过i,j最大数量的最小花费 
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d%d",&rmb[i],&rp[i],&time[i]);
    scanf("%d%d",&m,&r);//钱数  rp 
    memset(dp2,127,sizeof dp2);
    dp2[0][0]=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=m;j>=rmb[i];j--)
        {
            for(int k=r;k>=rp[i];k--)
            {
                if(dp1[j-rmb[i]][k-rp[i]]+1>dp1[j][k])
                {
                    dp1[j][k]=dp1[j-rmb[i]][k-rp[i]]+1;
                    dp2[j][k]=dp2[j-rmb[i]][k-rp[i]]+time[i];
                }
                else if(dp1[j-rmb[i]][k-rp[i]]+1==dp1[j][k])
                {
                    dp2[j][k]=min(dp2[j][k],dp2[j-rmb[i]][k-rp[i]]+time[i]);
                }
            }
        }
    } 
    printf("%d\n",dp2[m][r]);
    return 0;

}
2023/8/22 21:28
加载中...