hdu 1203 DP

来源:互联网 发布:数据库逻辑结构 编辑:程序博客网 时间:2024/05/19 13:58
//背包//求拿到offer的概率,先算一份也拿不到的概率//DP[j] = min(DP[j],DP[j-ai[i]] + bi[i])//求出拿不到offer的最小概率,再拿一减//memset很有问题,前一部分被置为1,后一部分是随机值#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define MAX 10001int n,m;int ai[MAX + 1];double bi[MAX + 1];double DP[MAX + 1];double c;int main(){while(scanf("%d%d",&n,&m) != EOF){if(n == 0 && m == 0)break;for(int i = 1; i <= m; i++){cin>>ai[i]>>bi[i];}                //memset(DP,1,sizeof(DP));for(int i = 0; i < MAX; i++){DP[i] = 1;}c = 1;for(int i = 1; i <= m; i++ ){for(int j = n; j >= ai[i]; j--){DP[j] = min(DP[j],DP[j-ai[i]] * (1 - bi[i]));c = min(c,DP[j]);}}double x = (1-c) * 100;printf("%.1f%%\n",x);}return 0;}

原创粉丝点击