1 条题解

  • 0
    @ 2024-12-24 9:49:24

    C++ :

    #include<stdio.h>
    #include<string.h>
    #define N 105
    double w[N];
    int v[N];
    double dp[10005];//抢i元不被抓的最大概率   
    double Max(double a,double b)
    {    
    if(a>b)       
       return a;   
    else       
       return b;
    }
    
    
    int main()
       {  
       int i,j;
       //freopen("test.txt","r",stdin);
       //freopen("test.out","w",stdout); 
       int T;  
       while(scanf("%d",&T)!=EOF)
       	{
       		for(i=0;i<10005;i++)
     {
     	dp[i]=0;
     }
       	 
       while(T--)    
     {     
        double vt;  
        int n;      
        int i,j;      
        scanf("%lf%d",&vt,&n);    
        int sum=0;      
    	 for(i=0;i<n;i++)     
        {          
    		 scanf("%d%lf",&v[i],&w[i]);   
    		 sum+=v[i];       
             w[i]=1-w[i];     
       }      
    	  for(i=0;i<=sum;i++)          
          dp[i]=0;     
          dp[0]=1;    //偷0元钱不被抓的概率肯定为1了,,,  
      for(i=0;i<n;i++)   
      {     
      for(j=sum;j>=v[i];j--)    
      dp[j]=Max(dp[j],dp[j-v[i]]*w[i]);     
       }      
         vt=1-vt;      //不被抓的最小概率    
    	 for(i=sum;i>=0;i--)        
    	 {            
    	 if(dp[i]>vt)        
        {      
    	          printf("%d\n",i);   
                  break;     
    	 }   
    								      
      } 
      
     }    
     
       }
    			return 0;
    }
    
    • 1

    信息

    ID
    868
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者