SSL P1377 竞赛真理

题目:

http://blog.csdn.net/qq_35786326/article/details/78837233

题意:

求在某竞赛中,选什么题目,选什么做法,得出最优(最大)值。

分析:

熟悉背包题目的同鞋们,一眼就可以看出是01背包。但在这里,小编因为是很久以前写的,所以就没有
使用非常规范的背包。
这里可以将每道题分为3种情况:
(1)不做这题
(2)做这题的全部分值
(3)“骗”这题的部分分值
只要把条件想清楚了,那么这题的AC,就只是时间的问题了。

代码(无优化):

#include
using namespace std;
int i,a,b,x1[500][3],x2[500][3],maxf,j;
double p[500],ww;
void r()
{
	cin>>a>>b;
	ww=0;
	for(i=1;i<=a;i++)
	{
		cin>>x1[i][1]>>x2[i][1]>>x1[i][2]>>x2[i][2];
		p[i]=(double)x1[i][1]/x2[i][1];
		if(p[i]<(double)x1[i][2]/x2[i][2]) p[i]=(double)x1[i][2]/x2[i][2];//p数组为记录每道题性价比最高的方案
	}
}
void pai()
{
	int f;
	for(i=1;i<=a-1;i++)
	  for(j=i+1;j<=a;j++)//范围不大,选排不会超时
	  {
	  	if(p[i]a)//当所有题目都做完时。。
	{
		if(f>maxf) maxf=f;
		return;
	}
	if(b*p[k]+f


你可能感兴趣的:(背包)