$NOIP2000$ 题解报告
目录
•$Luogu P1004$ 方格取数$( √ )$
•$Luogu P1017$ 进制转换$( √ )$
•$Luogu P1018$ 乘积最大 ( )
•$Luogu P1019$ 单词接龙$( √ )$
$Luogu P1004$ 方格取数
同$NOIP2008 Luogu P1006$ 传纸条
代码实现略有不同
1 #include<bits/stdc++.h> 2 #define ri register int 3 #define ll long long 4 #define rl register ll 5 #define go(i,a,b) for(ri i=a;i<=b;i++) 6 #define back(i,a,b) for(ri i=a;i>=b;i--) 7 #define g() getchar() 8 #define il inline 9 #define pf printf 10 #define mem(a,b) memset(a,b,sizeof(a)) 11 using namespace std; 12 il int fr(){ 13 ri w=0,q=1;char ch=g(); 14 while(ch<'0'||ch>'9'){if(ch=='-')q=-1;ch=g();} 15 while(ch>='0'&&ch<='9')w=(w<<1)+(w<<3)+ch-'0',ch=g(); 16 return w*q; 17 } 18 int n,a[10][10],f[20][10][10]; 19 il int Max(ri a,ri b,ri c,ri d){return max(a,max(b,max(c,d)));} 20 int main(){ 21 //freopen(".in","r",stdin); 22 //freopen(".out","w",stdout); 23 n=fr(); 24 ri x=fr(),y=fr(),z=fr(); 25 while(!(x==0&&y==0&&z==0)){a[x][y]=z;x=fr();y=fr();z=fr();} 26 go(k,1,n<<1){ 27 go(i,1,n)go(j,i,n){ 28 if(k-i+1<1||k-j+1<1)continue; 29 f[k][i][j]=Max(f[k-1][i][j],f[k-1][i][j-1],f[k-1][i-1][j],f[k-1][i-1][j-1])+a[i][k-i+1]+a[j][k-j+1]; 30 if(i==j)f[k][i][j]-=a[i][k-i+1]; 31 } 32 } 33 pf("%d ",f[n<<1][n][n]); 34 return 0; 35 }
$Luogu P1017$ 进制转换
就……直接模拟题目进制转换的过程?
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,r,ans[20]; 4 char x[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'}; 5 int main(){ 6 scanf("%d%d",&n,&r); 7 int k,i=0; 8 printf("%d=",n); 9 while(n!=0){ 10 k=n%r; 11 n/=r; 12 if(k>=0){ans[++i]=k;continue;} 13 k-=r;ans[++i]=k; 14 if(n>=0) n++; 15 else n--; 16 } 17 while(i>=1) 18 cout<<x[ans[i]],i--; 19 printf("(base%d)",r); 20 return 0; 21 }