欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

笔记

程序员文章站 2022-07-12 21:02:19
...

1.memset慎用,如(浙江理工大学2018新生赛“概率”):

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int cost[1005];
double pi[1005], dp[1005];
int main(){
    int n, m;
    while(~scanf("%d%d", &n, &m)){
        for(int i = 1; i <= n; i++){
            scanf("%d %lf", &cost[i], &pi[i]);
            pi[i] = 1- pi[i];
        }
        //memset(dp, 1, sizeof(dp));
        for(int i = 0; i <= m; i ++) dp[i] = 1;
        for(int i = 1; i <= n; i++)
          for(int j = m; j >= cost[i]; j--){
            dp[j] = min(dp[j], dp[j-cost[i]]*pi[i]);
          }
          printf("%.4f\n",1-dp[m]);
    }
   return 0;
}

中,使用memset(dp, 1, sizeof(dp));代替for(int i = 0; i <= m; i ++) dp[i] = 1;输入样例后会输出1.0000,问题在dp数组为double