求dalao指错
查看原帖
求dalao指错
206423
焚魂楼主2020/8/13 22:33

代码只有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;
}
2020/8/13 22:33
加载中...