代码只有40分,思路就是用DP求最优情况能搞定多少个MM,并求每种情况的时间,然后搜一遍求数量最多的情况下(保证数量)的最少时间。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
int rmb[110],rp[110],timex[110];
int m,r;
int f[110][110][2];
int maxx=-1,ans=1000000000;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>rmb[i]>>rp[i]>>timex[i];
cin>>m>>r;
for(int i=1;i<=n;i++)
for(int j=m;j>=rmb[i];j--)
for(int k=r;k>=rp[i];k--)
{
if(f[j-rmb[i]][k-rp[i]][0]+1>f[j][k][0])
{
f[j][k][0]=f[j-rmb[i]][k-rp[i]][0]+1;
f[j][k][1]+=timex[i];
}
}
for(int i=1;i<=m;i++)
for(int j=1;j<=r;j++)
{
if(f[i][j][0]>maxx || f[i][j][0]==maxx && f[i][j][1]<ans)
{
maxx=f[i][j][0];
ans=f[i][j][1];
}
}
cout<<ans;
return 0;
}