0/1分数规划+0/1背包模型(p4377)

0/1分数规划+0/1背包模型(p4377)_第1张图片

发现又是一道求max \frac{\sum_{i=1}^{n}t_{i}s_{i}}{\sum_{i=1}^{n}w_{i}s_{i}} 的0/1分数规划的题目,与普通的0/1分数规划不同的是,这题加了一个限制条件,总重量不低于W,我们只要把重量超过w看成等于w,这题不就是一个0/1背包问题。

对于0/1分数规划问题:(3条消息) 0/1分数规划(poj2976)_Knight840的博客-CSDN博客

对于0/1背包问题:dp[j]表示重量为j的最大权值,由于每个物品只有一个,且dp[j]是由比j小的值确定,如果从小到大遍历j,就会用到这一轮更新过的dp值,可能导致一轮不止用一次第i个物品的值,所以遍历j要从大到小遍历。

#include
using namespace std;
int n,w;
double dp[10000];
struct node
{
	int w;
	int t;
	double y;
}h[1005];
bool check(double m)
{
	for(int i=0;i=0;j--)//一定是从大到小遍历 
		{
			if(j+h[i].w>=w)
			{
				dp[w]=max(dp[w],dp[j]+h[i].y);
			}
			else dp[j+h[i].w]=max(dp[j+h[i].w],dp[j]+h[i].y);
		}
	}
	if(dp[w]>=0)return 1;
	else return 0;
}
int main()
{
	cin>>n>>w;
	for(int i=0;i>h[i].w>>h[i].t; 
	}
	double l=0,r=0;
	for(int i=0;i

你可能感兴趣的:(数论,洛谷,动态规划,算法,c++)