简单题目!
明天上学,是否再AC一道背包之后再睡觉呢?
/*
* hdu-1203 i need a offer
* mike-w
* 2011-10-10
* ----------------------
* 0-1背包
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define MAXN 10010
#define MAXM 1010
float opt[MAXN];
long fee[MAXM];
float p[MAXM]; /* 被拒的概率 */
long M,N;
int main(void)
{
#ifndef ONLINE_JUDGE
assert(freopen("1203.in","r",stdin));
#endif
long i,j;
while(scanf("%ld%ld",&N,&M),M||N)
{
for(i=0;i<M;i++)
scanf("%ld%f",fee+i,p+i),p[i]=1.0-p[i];
for(i=0;i<=N;i++)
opt[i]=1.0;
for(i=0;i<M;i++)
for(j=N;j>=fee[i];j--)
if(opt[j]>opt[j-fee[i]]*p[i])
opt[j]=opt[j-fee[i]]*p[i];
printf("%.1f%%\n",(1.0-opt[N])*100.0);
}
return 0;
}
本文介绍了一个简单的0-1背包问题解决方法,并提供了一段C语言实现的代码示例。该算法通过动态规划来计算在给定费用和数量限制下获得的最大成功率。
6万+

被折叠的 条评论
为什么被折叠?



