I NEED A OFFER! HDU - 1203 (dp01背包 min计算)

这题就是一个简单的01背包,不过是用min来算的

思路 用每个大学的学费当weight ,概率当value(和robberies差不多),可能被好几个符合条件的学校录取,不被录取的相乘,就是而且取最小的,就可以得到被录取的最大概率.
Ac 代码

#include <iostream>
#include <algorithm>
using namespace std;
struct Dat
{
	int a; float b;//wight,value(即价值) 
}date[10000];
float  dp[10000];
int main()
{

	int n, m;//n为容量,m为几种
	while (cin >> n >> m) {
		if (n == 0 && m == 0) {
			break;
		}
		for (int i = 0; i < m; i++) {
			float k;
			cin >> date[i].a >> k;//翻着做 
			date[i].b = 1 - k;
		} 
		for (int i = 0; i<=n; i++) {
			dp[i] = 1;
			}
		for (int i = 0; i < m; i++) {
			for (int j = n; j>=date[i].a; j--) {
					dp[j] = min(dp[j], dp[j - date[i].a] * date[i].b);
			}
		}
		printf("%.1f%%\n", (1-dp[n])*100);
	}
	return 0;}



````````````````


     具体的max还是min是根据题意的
posted @ 2021-01-27 22:59  pursuit_purity  阅读(89)  评论(0)    收藏  举报