社区讨论

高精比单精少了30分,蒟蒻求解于dalao

P1018[NOIP 2000 提高组] 乘积最大参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi6yaztm
此快照首次捕获于
2025/11/20 12:48
4 个月前
此快照最后确认于
2025/11/20 12:48
4 个月前
查看原帖
#include<bits/stdc++.h> using namespace std; const int maxn=101; long long f[maxn][maxn]; long long a1[maxn],b1[maxn],c[maxn]; string s; long long g[maxn]; long long cut(long long l,long long r) { long long end=0; for(long long i=l;i<=r;i++) end=end10+g[i]; return end; } void strint(const int &int_temp,string &string_temp) { stringstream stream; stream<<int_temp; string_temp=stream.str();
} long long cifang(long long a,long long b) { if(b==0) return 1; else if(b==1) return a; else { int qq=a; for(long long i=2;i<=b;i++) a
=qq; return a; } } long long chengfa(long long a,long long b) { memset(a1,0,sizeof(a1)); memset(b1,0,sizeof(b1)); memset(c,0,sizeof(c)); string s1,s2; strint(a,s1); strint(b,s2); long long la=s1.size(); long long lb=s2.size(); if(s1=="0"||s2=="0") return 0; for(int i=1;i<=la;i++) a1[i]=s1[la-i]-'0'; for(int i=1;i<=lb;i++) b1[i]=s2[lb-i]-'0'; for(int i=1;i<=la;i++) for(int j=1;j<=lb;j++) c[i+j-1]+=a1[i]*b1[j]; for(long long i=1;i<la+lb;i++) { if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]%=10; } } long long ans=0; long long lc=la+lb; while(c[lc]==0&&lc>1)lc--; for(long long i=lc;i>=1;i--) { ans+=c[i]*cifang(10,i-1); } return ans; } int main() { long long n,l; cin>>n>>l>>s; for(long long i=1;i<=n;i++)g[i]=s[i-1]-'0'; for(long long i=1;i<+n;i++) f[i][0]=cut(1,i); for(long long i=2;i<=n;i++) for(long long j=1;j<=min(i-1,l);j++) for(long long k=j;k<i;k++) f[i][j]=max(f[i][j],chengfa(f[k][j-1],cut(k+1,i))); cout<<f[n][l]; }

回复

6 条回复,欢迎继续交流。

正在加载回复...