码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5089

时间:2014-11-02 13:45:36      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   for   sp   div   

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <vector>
 4 #include <string.h>
 5 #define inf 1e-8
 6 using namespace std;
 7 vector<int> vec;
 8 int main()
 9 {
10     int cas,n,k,posi;
11     double pro[100];
12     bool visit[100];
13     scanf("%d",&cas);
14     while(cas--)
15     {
16         scanf("%d%d",&n,&k);
17         memset(visit,0,sizeof(visit));
18         for(int i= 1; i<=n; i++)
19         {
20             scanf("%lf",pro+i);
21             pro[i] /= 100;
22         }
23         double re = 0;
24         for(int i =0; i<=k; i++)
25         {
26             double tmp = 1.0;
27             double Re = 0;
28             vec.clear();
29             for(int j = 1; j<=i; j++)
30                 vec.push_back(j);
31             for(int j = 0 ; j<k-i; j++)
32                 vec.push_back(n-j);
33             for(int j = 0; j<vec.size(); j++)
34             {
35                 tmp = 1.0;
36                 for(int jj = 0; jj<vec.size(); jj++) // 不要用除法,防止概率为0的情况
37                     if(jj !=j)
38                         tmp *= pro[vec[jj]];
39                     else
40                         tmp *= (1-pro[vec[jj]]);
41                 Re+= tmp;
42             }
43             if(Re -re > -inf)   //精度判断
44             {
45                 re = Re;
46                 posi = i;
47             }
48         }
49 
50 
51         vec.clear();
52         for(int i = 1; i<=posi; i++)
53             visit[i] = 1;
54 
55         for(int i = n -(k-posi)+1; i<=n; i++)   //最优解的情况下保证字典序最小
56         {
57             visit[i] = 1;
58             posi = i;
59             for(int j = i -1; j >0; j--)
60             {
61                 if(visit[j])
62                     break;
63                 if(pro[j] > pro[j+1])  // 最好用整形去判断,但是用浮点也能过
64                     break;
65                 posi = j;
66             }
67             visit[i] = 0;
68             visit[posi] = 1;
69         }
70 
71 
72         for(int i= 1; i<=n; i++)    //输出格式
73             if(visit[i])
74                 vec.push_back(i);
75 
76         for(int i = 0 ; i<vec.size()-1; i++)
77             printf("%d ",vec[i]);
78 
79         printf("%d\n",vec[vec.size()-1]);
80 
81     }
82     return 0;
83 }
84 /*
85 2
86 6 4
87 0 0 0 0 0 0
88 4 2
89 1 1 1 1
90 */

 

hdu 5089

标签:style   blog   io   color   ar   os   for   sp   div   

原文地址:http://www.cnblogs.com/ChenAlong/p/4069019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!