1203 I NEED A OFFER! 简单解题报告

    01背包问题的变形题,很简单了,下面是偶的AC代码。初始化是全部赋值为1,即100%。memset函数是不行的哦。

#include <iostream>
using namespace std;

const int MAX=10001;
int c[MAX];
double dp[MAX];
double v[MAX];

int main()
{
    int n,m,i,j;
    double t;
    while(cin>>n>>m && (n||m))
    {
        for(i=0;i<m;i++)
        {
            cin>>c[i]>>t;
            v[i]=1-t;
        }
        for(i=0;i<MAX;i++)
            dp[i]=1;
        for(i=0;i<m;i++)
            for(j=n;j>=c[i];j--)
                if(dp[j]>(t=dp[j-c[i]]*v[i]))
                    dp[j]=t;
        printf("%.1f%%\n",(1-dp[n])*100);
    }
}

 

posted @ 2013-02-11 19:41  SF-_-  阅读(119)  评论(0编辑  收藏  举报