1. 程式人生 > >Codeforces Global Round 2 E. Pavel and Triangles(思維+DP)

Codeforces Global Round 2 E. Pavel and Triangles(思維+DP)

pac air mem clu names 沒有 size using pan

題目鏈接:https://codeforces.com/contest/1119/problem/E

題意:有n種長度的棍子,有a_i根2^i長度的棍子,問最多可以組成多少個三角形

題解:dp[i]表示前 i 種棍子可以組成的最大三角形數量,f[i]表示沒有用到的棍子數量,三角形的形狀只有兩種(2 ^ i, 2 ^ i, 2 ^ i)或者(2 ^ i, 2 ^ i, 2 ^ j),顯然先用之前剩下的來組三角形最優,然後就可以轉移了。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4
#define ull unsigned long long 5 #define mst(a,b) memset((a),(b),sizeof(a)) 6 #define mp(a,b) make_pair(a,b) 7 #define pi acos(-1) 8 #define pii pair<int,int> 9 #define pb push_back 10 #define lowbit(x) ((x)&(-x)) 11 const int INF = 0x3f3f3f3f; 12 const double eps = 1e-6; 13 const
int maxn = 3e5 + 10; 14 const int maxm = 1e6 + 10; 15 const ll mod = 998244353; 16 17 18 int main() { 19 #ifdef local 20 freopen("data.txt", "r", stdin); 21 // freopen("data.txt", "w", stdout); 22 #endif 23 int n; 24 cin >> n; 25 ll res = 0, ans = 0; 26 for(int
i = 0; i < n; i++) { 27 ll a; 28 cin >> a; 29 ll mn = min(res, a / 2); 30 res -= mn, a -= 2 * mn; 31 ans += mn + a / 3; 32 a %= 3; 33 res += a; 34 } 35 cout << ans << endl; 36 return 0; 37 }

Codeforces Global Round 2 E. Pavel and Triangles(思維+DP)