Descrption
Input
Output
Sample Input
2
4 0 1 2 3 4
2 0 3 1
Sample Output
6
Hint
分析
Code
#include <bits/stdc++.h>
typedef long long LL;
const int MAX = 55440;//除了13,17,19,23外其他数的最下公倍数
int n,tmp[30];
LL ans,psum,sum[30][30];
void Calc(int D){//计算一天的最大流量
LL Max = 0;
for(int i = 1; i <= D; ++i)Max = std::max(Max,sum[D][i]);
psum += Max;
}
void Solve(){
scanf("%d",&n);
for(int i = 1; i <= n; ++i){//n个星球D相同的合并,最多就剩下24个星球
int D,T;scanf("%d%d",&D,&T);
for(int j = 1; j <= D; ++j)scanf("%d",&tmp[j]);
for(int st = T + 1,t = 1; t <= D; ++st,++t){//时刻同步,时刻从1开始
if(st > D)st -= D;//T+1(平移了一位)都对应t=1时刻,其他依次后倒
sum[D][t] += tmp[st];//合并到一起
}
}
Calc(13);Calc(17);Calc(19);Calc(23);
for(int i = 1; i <= MAX; ++i){//大于MAX的就重复的循环了
LL cursum = 0;
for(int j = 1; j <= 24; ++j){//枚举24个合并的星球
if(j == 13 || j == 17 || j == 19 || j == 23)continue;
int cur = (i - 1) % j + 1;//计算时刻
cursum += sum[j][cur];
}
ans = std::max(ans,cursum);
}
printf("%lld\n",ans + psum);
}
int main(){
Solve();
return 0;
}
原文:https://www.cnblogs.com/hbhszxyb/p/13334982.html