2014年9月6日

第一题,神题不可做。

第二题,傻逼题裸裸的转移。。显而易见。

 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 using namespace std;

 5 double a[20][20];

 6 double dp[2000010];

 7 int main()

 8 {

 9 //    freopen("b.in","r",stdin);

10 //    freopen("b.out","w",stdout);

11     int N;

12     scanf("%d",&N);

13     for(int i=1;i<=N;i++)

14         for(int j=1;j<=N;j++)

15             scanf("%lf",&a[i][j]);

16     for(int i=1;i<(1<<N);i++)

17         dp[i]=0.0;

18     dp[0]=1.0;

19     for(int i=0;i<=(1<<N);i++)

20     {

21         int cnt=N,x=i;

22         while(x)

23         {

24             cnt--;

25             x=x&(x-1);

26         }

27         for(int j=0;j<N;j++)

28             if(!(i&(1<<j)))

29                 for(int k=0;k<N;k++)

30                     if(!(i&(1<<k)))

31                         if(j!=k)

32                         {

33                             dp[i|(1<<j)]+=dp[i]*(double)2/((double)(cnt-1)*(cnt))*(a[k+1][j+1]);

34                         }

35     }

36     int T=(1<<N)-1;

37     for(int i=0;i<N;i++)

38         printf("%.5lf\n",dp[T-(1<<i)]);

39 }
View Code

第三题,用01串表示最大fibonacci数来表示,然后dp转移,当场考试我就差了一点,一种比较特殊的情况,导致我直接WA10,←_←。。。

 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 using namespace std;

 5 #ifdef  WIN32

 6 #define LL "%I64d"

 7 #else

 8 #define LL "%lld"

 9 #endif

10 long long b[110],T;

11 bool c[110],d[110];

12 long long x[110];

13 long long dp[110][2];

14 int main() 

15 {

16 //    freopen("c.in","r",stdin);

17 //    freopen("c.out","w",stdout);

18     b[1]=1;

19     b[2]=2;

20     for(int i=3;i<=91;i++)

21     {

22         b[i]=b[i-1]+b[i-2];

23     }

24     scanf(LL,&T);

25     long long a;

26     while(T--)

27     {

28         scanf(LL,&a);

29         int maxx=0;

30         long long ans=1;

31         memset(c,0,sizeof(c));

32         memset(d,0,sizeof(d));

33         if(a<=0)

34         {

35             cout<<"0"<<endl;

36             continue;

37         }

38         for(int i=91;i>=1;i--)

39         {

40             if(a>=b[i])

41                 maxx=max(maxx,i),d[i]=c[i]=true,a-=b[i];

42         }

43         long long cnt=0;

44         long long nn=0;

45         for(int i=1;i<=maxx;i++)

46         {

47             if(!d[i])

48                 cnt++;

49             else

50             {

51                 x[++nn]=cnt;

52                 cnt=0;

53             }

54         }

55         dp[0][0]=1;

56         dp[0][1]=0;

57         for(int i=1;i<=nn+1;i++)

58         {

59             dp[i][0]=dp[i-1][0]+dp[i-1][1];

60             dp[i][1]=dp[i-1][0]*(x[i]/2)+dp[i-1][1]*((x[i]+1)/2);

61         }

62         printf(LL "\n",dp[nn+1][0]);

63     }

64     return 0;

65 }
View Code

 

你可能感兴趣的:(2014年9月6日)