【模拟题】陈老师搬书
错误代码
#include<bits/stdc++.h> using namespace std; const int inf = 2147483647; int i,j,k; long long ans; int stki[102],stkj[102],stkk[102]; int mintop(int a,int b,int c) { if(a < b) { if(a < c) return 1; else return 3; } else { if(a < c) return 2; else { if(b > c) return 3; else return 2; } } } int main() { int t,m,topi,topj,topk; cin >> i >> j >> k; for( t = 0 ; t < i ; t++ ) { cin >> m; stki[t] = m; } topi = t-1; for( t = 0 ; t < j ; t++ ) { cin >> m; stkj[t] = m; } topj = t-1; for( t = 0 ; t < k ; t++ ) { cin >> m; stkk[t] = m; } topk = t-1; t = 1; while(stki[topi] || stkj[topj] || stkk[topk]) { int a = inf,b = inf,c = inf,d; if(topi >= 0) a = stki[topi]; if(topj >= 0) b = stkj[topj]; if(topk >= 0) c = stkk[topk]; m =mintop(a,b,c); if(m == 1) { d = stki[topi]; topi--; } if(m == 2) { d = stkj[topj]; topj--; } if(m == 3) { d = stkk[topk]; topk--; } /* if(stki[topi] < stkj[topj] && stki[topi] && stkj[topj]) { if(stki[topi] < stkk[topk]) { m = stki[topi]; topi--; } else { m = stkk[topk]; topk--; } } else { if(stki[topi] < stkk[topk]) { m = stkj[topj]; topj--; } else { if(stkj[topj] < stkk[topk]) { m = stkj[topj]; topj--; } else { m = stkk[topk]; topk--; } } } */ ans += t*d; t++; } cout << ans; return 0; }
实现代码:
#include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #include<stack> using namespace std; long f[110][110][110]; int a1[110],a2[110],a3[110],k1,k2,k3,i,j,k; int main() { //freopen("book.in","r",stdin); //freopen("book.out","w",stdout); scanf("%d%d%d",&k1,&k2,&k3); for(i=k1;i>0;--i) scanf("%d",&a1[i]); for(i=k2;i>0;--i) scanf("%d",&a2[i]); for(i=k3;i>0;--i) scanf("%d",&a3[i]); for(i=0;i<=k1;++i) for(j=0;j<=k2;++j) for(k=0;k<=k3;++k){ if(i>=1) f[i][j][k]=max(f[i][j][k],f[i-1][j][k]+a1[i]*(i+j+k)); if(j>=1) f[i][j][k]=max(f[i][j][k],f[i][j-1][k]+a2[j]*(i+j+k)); if(k>=1) f[i][j][k]=max(f[i][j][k],f[i][j][k-1]+a3[k]*(i+j+k)); } printf("%ld\n",f[k1][k2][k3]); return 0; }

浙公网安备 33010602011771号