项目分配
一个人可以负责多个项目,一个项目只能由一个人负责,每个员工i负责项目j
的收益为a[i, j],求最大收益?
输入
3 3
1 3 3
2 2 2
3 2 1
输出
9
就是每个项目的最大收益累加和。
#include <iostream>
using namespace std;
//int a[1005][1005];
int main(){
int n, m;
cin>>n>>m;
int b[1005] = {0};
int a;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin>>a;
if(a > b[j]) b[j] = a;
}
}
int sum = 0;
for (int i=0; i<m; i++){
sum += b[i];
}
cout<<sum<<endl;
return 0;
}
法阵的最大威力
法阵由正多边形构成(至少是正三边形),每个基座有一个威力值v_i,法阵威力值为所有基座的威力值的和。但是有些基座的威力是负值,这时我们可以移除部分法阵以使法阵威力最大,但是基座的位置不能移动,求得到的法阵的最大威力(注意:法阵是正多边形)
输入 第一行,基座个数,第二行,每个基座的威力
6
1 5 2 -3 3 -3
输出
6
正六边形里有正三边形,正八边形里有正四边形,正九边形里有正三边形,整除关系,然后遍历所有的正多边形即可
#include <iostream>
using namespace std;
int a[20005];
int main(){
int n;
cin>>n;
int result = 0;
for(int i=0; i<n; i++){
cin>>a[i];
result += a[i];
}
for(int k=3; k<=n/2; k++){
if(n%k == 0){
int step = n/k;
for (int i=0; i<n/k; i++){
int p=i, sum = 0;
while(p<n){
sum+=a[p];
p+=step;
}
if (result < sum) result = sum;
}
}
}
cout<<result<<endl;
return 0;
}