【2020杭电多校】 Lead of Wisdom、The Oculus

题目链接:Lead of Wisdom

 

题意:有n个物品,这些物品有k种类型。每种物品有对应的类型ti,其他值ai,bi,ci,di

你可以选择一些物品,但是这些物品要保证它们任意两者之间类型不能相同,即ti != tj。最后输出最大的DMG

 

 

 

 

题解:

如果输入的物品总类型数量有ans种,那么肯定是选择ans个物品最后的DMG最大,怎么选ans个物品,就暴力枚举就行

 

 

代码:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <vector>
 5 #include <map>
 6 #include <queue>
 7 #include <set>
 8 #include <ctime>
 9 #include <cstring>
10 #include <cstdlib>
11 #include <math.h>
12 using namespace std;
13 typedef long long ll;
14 const int maxn=65;
15 const int eps=1e-6;
16 struct Node
17 {
18     ll a, b, c, d;
19 } p;
20 vector<Node> vec[maxn];
21 ll vis[maxn];
22 ll dfs(ll u, ll a, ll b, ll c, ll d, ll now)
23 {
24     if (u == now + 1)
25     {
26         return (100 + a) * (100 + b) * (100 + c) * (100 + d);
27     }
28     ll n = vec[u].size();
29     ll ans = 0;
30     for (ll i = 0; i < n; i++)
31     {
32         p = vec[u][i];
33         ans = max(ans, dfs(u + 1, a + p.a, b + p.b, c + p.c, d + p.d, now));
34     }
35     return ans;
36 }
37 int main()
38 {
39     ios::sync_with_stdio(false);
40     cin.tie(0);
41     int t;
42     ll ans = 1;
43     for (int i = 0; i < 16; i++)
44         ans *= 3;
45     cout << ans << endl;
46     cin >> t;
47     while (t--)
48     {
49         ll n, k, cnt = 0;
50         cin >> n >> k;
51         for (ll i = 1; i <= n; i++)
52             vec[i].clear(), vis[i] = 0;
53         for (ll i = 0; i < n; i++)
54         {
55             ll kind, a, b, c, d;
56             cin >> kind >> a >> b >> c >> d;
57             if (!vis[kind])
58                 vis[kind] = ++cnt;
59             vec[vis[kind]].push_back({a, b, c, d});
60         }
61         cout << dfs(1, 0, 0, 0, 0, cnt) << endl;
62     }
63 }
View Code

 

 

题目链接:The Oculus

 

题意:

定义一个斐波那契新数列,F[1]=1,F[2]=[2],F[n]=F[n-1]+F[n-2]

一个数x可有斐波那契数列得出,例如 4 = (1*1+2*0+3*1)    5 = (1*0+2*0+3*0+5*1),所以
4=(1,0,1)5=(0,0,0,1)就是4、5的斐波那契数列

 

那么题目给你一个数A和数B的斐波那契数列,给你一个大于数C(A*B=C)的斐波那契数列,让你修改一下这个数列中某位的值,使得得到真的C的斐波那契数列。

最后输出你修改的是数列中那位的值

 

代码:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <vector>
 5 #include <map>
 6 #include <queue>
 7 #include <set>
 8 #include <ctime>
 9 #include <cstring>
10 #include <cstdlib>
11 #include <math.h>
12 using namespace std;
13 typedef long long ll;
14 typedef unsigned long long ull;
15 const int maxn=2e6+10;
16 const int eps=1e-6;
17 ull dp[maxn];
18 int main()
19 {
20     ios::sync_with_stdio(false);
21     cin.tie(0);
22     dp[1] = 1ull, dp[2] = 2ull;
23     for (ull i = 3; i <maxn; i++)
24         dp[i] = dp[i - 1] + dp[i - 2];
25     ull t;
26     cin >> t;
27     while (t--)
28     {
29         ull a, b, c, res = 0, ans = 0, cra = 0, x;
30         cin >> a;
31         for (ull i = 1; i <= a; i++)
32         {
33             cin >> x;
34             if (x == 1)
35                 res += dp[i];
36         }
37         cin >> b;
38         for (ull i = 1; i <= b; i++)
39         {
40             cin >> x;
41             if (x == 1)
42                 ans += dp[i];
43         }
44         cin >> c;
45         for (ull i = 1; i <= c; i++)
46         {
47             cin >> x;
48             if (x == 1)
49                 cra += dp[i];
50         }
51         ans *= res;
52         ull j = 1;
53         while (cra != ans-dp[j])
54             j++;
55         cout << j << endl;
56     }
57 }
View Code

 

posted @ 2020-07-27 08:59  kongbursi  阅读(165)  评论(0编辑  收藏  举报