TC SRM 573 DIV 2

终于在第4场TC,止住了rating一直下降的势头。。。

第一题水题,忘了。。。240+

第二题贪心,没注意结果和n/3比较,差点挂了,看第3个题没有思路,检查一下第二个题发现我少考虑这种情况了。。。悲剧啊,第二个题,没怎么有分了。。

涨了30分。。

第三个题,强哥说是DP,我写了个暴力4维DP,用滚动数组防止MLE,中间一直越界,导致最后一组数据过不了。。虎哥提示精度。。我改改了。。终于过了。效率不高,太暴力了。。。

 1 #include <cstdio>

 2 #include <cstring>

 3 #include <cmath>

 4 #include <iostream>

 5 #include <string>

 6 #include <ctime>

 7 #include <queue>

 8 #include <vector>

 9 #include <algorithm>

10 using namespace std;

11 #define MOD 1000000007

12 #define LL long long

13 vector<int>::iterator it;

14 int r[51],c[51];

15 int dp1[51][151][51];

16 int dp2[51][151][151];

17 class WolfPackDivTwo

18 {

19 public:

20     int calc(vector <int> x, vector <int> y, int m)

21     {

22         int i,j,k,n,v,u;

23         int ans = 0,temp;

24         int a[4] = {0,0,-1,1};

25         int b[4] = {1,-1,0,0};

26         for(it = x.begin(),i = 0; it != x.end(); it ++,i ++)

27         {

28             r[i] = (*it);

29         }

30         n = i;

31         for(it = y.begin(),i = 0; it != y.end(); it ++,i ++)

32         {

33             c[i] = (*it);

34         }

35         for(i = 0; i < n; i ++)

36         {

37             dp1[i][r[i]+50][c[i]+50] = 1;

38             for(j = 1; j <= m; j ++)

39             {

40                 for(k = 0; k <= 150; k ++)

41                 {

42                     for(u = 0; u <= 150; u ++)

43                     {

44                         for(v = 0; v < 4; v ++)

45                         {

46                             if(k+a[v]>=0&&k+a[v]<=150&&u+b[v]>=0&&u+b[v]<=150)

47                                 dp2[i][k][u] = ((LL)(dp2[i][k][u]+dp1[i][k+a[v]][u+b[v]]))%MOD;

48                         }

49                     }

50                 }

51                 for(k = 0;k <= 150;k ++)

52                 {

53                     for(u = 0;u <= 150;u ++)

54                     {

55                         dp1[i][k][u] = dp2[i][k][u];

56                         dp2[i][k][u] = 0;

57                     }

58                 }

59             }

60         }

61         for(j = 0; j <= 150; j ++)

62         {

63             for(k = 0; k <= 150; k ++)

64             {

65                 temp = 1;

66                 for(i = 0;i < n;i ++)

67                 {

68                     temp = ((LL)(temp*dp1[i][j][k]))%MOD;

69                 }

70                 ans = (ans + temp)%MOD;

71             }

72         }

73         return ans;

74     }

75 };

 

你可能感兴趣的:(div)