社区讨论
最后两个点RE 求助
P6509[COCI2007-2008] JEDNAKOST参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo8ywput
- 此快照首次捕获于
- 2023/10/28 02:49 2 年前
- 此快照最后确认于
- 2023/10/28 02:49 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 1;
string s; int n;
string pre; int nex;
int dp[N][5001], f[N][5001];
vector<int> q;
int main(){
cin >> s;
for(int i = 0; i < s.size(); ++i)if(s[i] == '=')n = i;
pre = ' ' + s.substr(0, n); nex = stoi(s.substr(n + 1, s.size() - n - 1));
memset(dp, 127, sizeof(dp)); dp[0][0] = 0;
for(int i = 1; i <= n; ++i){
int tp = 0, x = 1;
for(int j = i; j >= 1; --j){
// long long tp = stoull(pre.substr(j, i - j + 1));
// if(tp > nex)break;
tp += (pre[j] - '0') * x, x *= 10;
if(tp > nex)break;
for(int k = nex; k >= tp; --k){
dp[i][k] = min(dp[i][k], dp[j - 1][k - tp] + 1);
if(dp[j - 1][k - tp] + 1 == dp[i][k]){
f[i][k] = j;
}
}
}
}
//cout << dp[n][nex] << '\n';
int now = n; int zzz = nex;
while(now){
int pos = f[now][nex]; q.push_back(pos);
int tp = stoi(pre.substr(pos, now - pos + 1));
now = pos - 1; nex -= tp;
}
sort(q.begin(), q.end()); int p = 1; string ans = "";
for(int i = 1; i <= n; ++i){
ans += pre[i];
if(i + 1 <= n && i + 1 == q[p]){
ans += '+'; ++p;
}
}
ans += "=" + to_string(zzz);
cout << ans << '\n';
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...