社区讨论
50分求调
P14460【MX-S10-T1】『FeOI-4』寻雾启示参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhqm3c1s
- 此快照首次捕获于
- 2025/11/09 02:22 3 个月前
- 此快照最后确认于
- 2025/11/16 14:04 3 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
int T;
long long dp1[100001];
long long dp2[100001];
int main() {
cin >> T;
bool b1 = false;
for (int i = 1; i <= T; i++) {
bool b2 = false;
memset(dp1, 0x3f, sizeof(dp1));
memset(dp2, 0x3f, sizeof(dp2));
int m, k, t2, t1;
cin >> m >> k >> t1 >> t2;
dp1[0] = 0;
dp2[0] = 0;
for (int j = 0; j <= m; j++) {
long long t3 = dp1[j] - dp2[j] + j * t2;
long long k1 = t3/k;//(dp2[j]+t3)/k - (dp2[j])/k
long long f = k1;
if (k1 != 0 and j + f <= m ) {
for(int g=1;g<=f;g++){
if(dp1[j + g] > dp2[j] + t3 + j * t2 + g * t1){
dp1[j + g] = dp2[j] + t3 + j * t2 + g * t1;
dp2[j + g] = dp2[j] + t3;
}
}
}
for (long long f = k1+1; j + f <= m; f++) {
if (k1 + 1 > m - j) continue;
long long tt = k - ((dp2[j]+t3)%k) + (f - k1 -1) * k;
if(((dp2[j]+t3)%k)==0){
tt = (f - k1) * k;
}
//long long tt = k * (k1 + 1) - t3 + (f - k1 - 1) * k;
//if(tt<0){
//cout << "K1:" << k1 << "t3:" << t3 << "f:" << f << endl;
//}
if (dp1[j + f] >= dp2[j] + t3 + tt + j * t2 + f * t1) {
dp1[j + f] = dp2[j] + t3 + tt + j * t2 + f * t1;
dp2[j + f] = dp2[j] + t3 + tt;
}
}
}
if (b1)
cout << endl;
b1 = true;
for (int u = 1; u <= m; u++) {
if (b2)
cout << " ";
b2 = true;
cout << dp1[u];
}
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...