首页 > 其他 > 详细

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

时间:2021-01-28 08:56:31      阅读:28      评论:0      收藏:0      [点我收藏+]

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

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

Ac 代码

include

include

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是根据题意的

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

原文:https://www.cnblogs.com/pursuit-purity/p/14337496.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!