zhege122 @ 2024-11-16 12:27:26
西行寺幽幽子的庭院中有
幽幽子决定将这些树分成不超过
求最优分组方案下,所有组的美丽度总和。
第一行输入两个整数
接下来一行输入
输出仅一个整数,表示最大的美丽度总和。
12 2
1 2 3 4 2 3 4 5 3 4 5 6
35
对于前 30% 的数据:
对于前 50% 的数据:
对于前 70% 的数据:
对于另外 10% 的数据:
对于 100% 的数据:
最优分组方案之一为
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
scanf("%d%d", &n, &m);
vector<int> beauty(n);
for (int i = 0; i < n; i++) {
scanf("%d", &beauty[i]);
}
long long tot = 0;
if (m > 1) {
for (int b : beauty) {
tot += b;
}
printf("%lld\n", tot);
} else {
for (int b : beauty) {
tot += b;
}
printf("%lld\n", tot);
}
return 0;
}
请大佬们帮忙调试一下,连结果都不对,提供
by r2bxyy @ 2024-11-16 12:35:07
对于每个组,最优解一定是每个组内每种树只有一颗
#include<bits/stdc++.h>
#define N 200009
//N根据题目要求修改
using namespace std;
map<int,int> cnt,vst;
int a[N],ans;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
cnt[a[i]]++;
}
for(int i=1;i<=n;i++){
if(vst[a[i]]==1)continue;//这种树已经计算过了
ans+=min(m,cnt[a[i]])*a[i];//如果有m颗那就每组放一个,没有就能放多少放多少
vst[a[i]]=1;
}
cout<<ans<<endl;
return 0;
}
by zhege122 @ 2024-11-16 12:38:58
@r2bxyy 好的,我试一下
by zhege122 @ 2024-11-16 12:41:50
@r2bxyyRE 了5个点,还能再调调吗?
by r2bxyy @ 2024-11-16 12:51:35
@zhege122去吃了个饭 数据范围发一下?
by _Kenma_ @ 2024-11-16 12:52:12
把 N 改成
by r2bxyy @ 2024-11-16 12:53:00
不好意思,没展开 改成10^6就好了@zhege122
by zhege122 @ 2024-11-16 12:56:45
@r2bxyy 好,非常感谢,已关!
by zhege122 @ 2024-11-16 12:56:57
@Kenma 已关