acm入门基础题解一.docx
- 文档编号:2249277
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:16
- 大小:345.49KB
acm入门基础题解一.docx
《acm入门基础题解一.docx》由会员分享,可在线阅读,更多相关《acm入门基础题解一.docx(16页珍藏版)》请在冰豆网上搜索。
acm入门基础题解一
ProblemA:
数字三角形
#include
#include
constintmaxn=110;
inta[maxn][maxn],b[maxn][maxn],n;
voiddata_set(){
for(inti=1;i<=n;i++){
for(intj=1;j<=i;j++){
scanf("%d",&a[i][j]);
}
}
}
voidsolve(){
for(intj=1;j<=n;j++)
b[n][j]=a[n][j];
for(inti=n-1;i>=1;i--)
for(intj=1;j<=i;j++){
if(b[i+1][j+1]>b[i+1][j])
b[i][j]=b[i+1][j+1]+a[i][j];
else
b[i][j]=b[i+1][j]+a[i][j];
}
printf("%d\n",b[1][1]);
}
intmain(){
while(scanf("%d",&n)!
=EOF&&n!
=0){
data_set();
solve();
}
return0;
}
ProblemB:
去北京看奥运
#include
#include
constintmaxn=110;
constintinf=200000000;
inta[maxn],b[maxn][maxn],dp[maxn][maxn],n;
voiddata_set(){
for(intj=0;j for(intk=0;k dp[k][j]=inf; dp[0][1]=0; ints,e,l; scanf("%d",&n); a[0]=1;a[n+1]=1; for(inti=1;i<=n;i++)scanf("%d",&a[i]); for(inti=0;i<=n;i++){ for(intj=1;j for(intk=1;k b[k][j]=inf; while (1){ scanf("%d",&s); if(s==0)break; scanf("%d%d",&e,&l); b[s][e]=l; } for(intj=1;j<=a[i+1];j++){ for(intk=1;k<=a[i];k++){ if(dp[i+1][j]>dp[i][k]+b[k][j]&&b[k][j]! =inf) dp[i+1][j]=dp[i][k]+b[k][j]; } } } printf("%d\n",dp[n+1][1]); } intmain(void){ intt; scanf("%d",&t); while(t--) data_set(); } ProblemC: 计算直线的交点数 #include #include usingnamespacestd; intmain() { intn,tmp; set s[0].insert(0); s[1].insert(0); for(inti=2;i<21;i++) { for(intj=0;j { set : iteratorit; for(it=s[j].begin();it! =s[j].end();it++) { tmp=*it+(i-j)*j; s[i].insert(tmp); } } } while(cin>>n) { set : iteratorit; for(it=s[n].begin();it! =s[n].end();it++) { if(it! =s[n].begin())cout<<""; cout<<*it; } cout< } } ProblemD: 免费馅饼 #include #include inta[100050][11]; intmain() { inti,j,n,p,q,x,m; while(scanf("%d",&n)! =EOF) { if(n==0)break; m=0; memset(a,0,sizeof(a)); for(i=1;i<=n;i++) { scanf("%d%d",&q,&p); a[p][q]++; if(p>m)m=p; } for(i=m;i>=0;i--) { for(j=0;j<11;j++) { intx=a[i+1][j]; if(j>0&&a[i+1][j-1]>x)x=a[i+1][j-1]; if(j<10&&a[i+1][j+1]>x)x=a[i+1][j+1]; a[i][j]+=x; } } printf("%d\n",a[0][5]); } return0; } ProblemE: 地道战 #include #include constintmaxn=110; constintinf=200000000; intn,m,a[maxn][maxn],r[maxn][maxn],d[maxn][maxn]; intmin(inta,intb){ returna a: b; } voiddata_set(){ for(inti=1;i<=n;i++) for(intj=1;j scanf("%d",&r[i][j]); for(inti=1;i<=m;i++) for(intj=1;j scanf("%d",&d[j][i]); for(inti=0;i<=n;i++) for(intj=0;j<=m;j++) a[i][j]=inf; } voidsolve(){ a[1][1]=0; for(inti=2;i<=m;i++)a[1][i]=a[1][i-1]+r[1][i-1]; for(inti=2;i<=n;i++)a[i][1]=a[i-1][1]+d[i-1][1]; for(inti=2;i<=n;i++){ for(intj=2;j<=m;j++){ a[i][j]=min(a[i][j-1]+r[i][j-1],a[i-1][j]+d[i-1][j]); } } printf("%d\n",a[n][m]); } intmain() { while(scanf("%d%d",&n,&m)! =EOF){ data_set(); solve(); } } ProblemF: 最长不下降序列 #include #include #include usingnamespacestd; constintmaxn=2000; inti,j,n,t,x,lmax,a[maxn],b[maxn]; intmain(){ intmax; while(scanf("%d",&n)! =EOF){ for(i=1;i<=n;i++) cin>>a[i]; b[n]=1; lmax=0; for(i=n-1;i>=1;i--){ max=0; for(j=i+1;j<=n;j++) if(a[i]<=a[j]&&b[j]>max) max=b[j]; b[i]=max+1; if(b[i]>lmax)lmax=b[i]; } cout< } return0; } ProblemA: Substrings #include #include #include usingnamespacestd; boolcomp(stringstr1,stringstr2){ returnstr1.length() } stringstr[112]; intmain(){ intt; cin>>t; while(t--){ intn; cin>>n; inti=0; for(i=0;i cin>>str[i]; sort(str,str+n,comp); string: : iteratorp1; string: : iteratorp2; string: : iteratorp0; intans=0,max=0; for(p1=str[0].begin();p1 for(p2=str[0].end()-1;p2>=p1;p2--){ stringss1=str[0].substr(p1-str[0].begin(),p2-p1+1); stringss2; for(string: : iteratorit=p2;it>=p1;it--){ ss2+=*it; } ans=ss1.length(); intflag=1; for(i=1;i intx=str[i].find(ss1); inty=str[i].find(ss2); if(x==-1&&y==-1){ flag=0; break; } } if(flag==1&&max<=ans) max=ans; } cout< } return0; } ProblemB: CallingExtraterrestrialIntelligcn #include #include #include #defineN100005 usingnamespacestd; boolno_prim[N]; intm,a,b,p,q; voidprimetable() { inti,j; for(i=3;i<317;i+=2) { if(no_prim[i]==false) { inttmp=i<<1; for(j=i*i;j no_prim[j]=true; } } } intmain() { inti,j; primetable(); while(scanf("%d%d%d",&m,&a,&b)&&m&&a&&b) { p=q=0; doublelimit=a*1.0/b; for(i=2;i<=m;i++) { if(! no_prim[i]&&i%2! =0||i==2) { for(j=2;j<=i&&i*j<=m;j++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- acm 入门 基础 题解