HDU 1203

来源:互联网 发布:知乎 许哲 编辑:程序博客网 时间:2024/05/26 12:04

又是一道背包题,模式完全一样的,就是稍微注意下格式,然后memset不能对double型的进行初始化。就是练练手。

但是1A还是挺开心的。。。。double注意精度处理问题。

#include <stdio.h>#include <string.h>#define maxn 10010#define eps 1e-12#define inf 0x3f3f3f3fdouble dp[maxn],pro[maxn];int cost[maxn],n,m;int sig(double x){    return (x>eps)-(x<-eps);}double min(double x,double y){    if(sig(x-y)>0) return y;    else return x;}void init(){    for(int i=0;i<=m;i++) dp[i]=1.0000;}int main(){  //  int n,m;    while(1)    {        scanf("%d%d",&m,&n);        if(n+m==0) break;     //   memset(dp,1.0,sizeof(dp));        init();        int i,j,k;        for(i=1;i<=n;i++) scanf("%d%lf",&cost[i],&pro[i]);      //  for(i=1;i<=n;i++) printf("**%lf",1-pro[i]);printf("\n");        for(i=1;i<=n;i++)            {                for(j=m;j>=cost[i];j--)            {          //      printf("**%lf",dp[j-cost[i]]*(1-pro[i]));                dp[j]=min(dp[j],dp[j-cost[i]]*(1-pro[i]));            }         //   printf("\n");            }        printf("%.1lf%%\n",(1-dp[m])*100);    }    return 0;}


0 0
原创粉丝点击