这两种写法有什么差别吗?
查看原帖
这两种写法有什么差别吗?
246800
wocaicai楼主2020/9/8 16:56

rt 一开始只拿了十分,后来改了一下,就过了,但感觉没什么区别呀,有大佬愿意给蒟蒻解答吗

10分代码如下

#include<bits/stdc++.h>
using namespace std ;
#define maxn 3100
#define int long long
#define kkk signed main
inline int read(){
	int ans = 0 , f = 1 ; char ch = getchar() ;
	while ( ch < '0' || ch > '9') {	 if( ch == '-' )  f = -1 ; ch = getchar() ; }
	while ( ch >= '0' && ch <= '9' ) ans =  ( ans << 3 ) +  ( ans << 1 ) + ch - '0' , ch = getchar() ;
	return ans * f ;
}
#define re register int
#define lc (o << 1)
#define rc ((o << 1) | 1)
#define mid ((l + r) >> 1)
int n , a[maxn] ; 
int f[maxn][maxn] ; 
kkk(){
//	freopen("test.in" , "r" , stdin) ;
//	freopen("test.out" , "w" , stdout) ;
	memset(f , 127 , sizeof(f)) ; 
	n = read() ; 
	for(int i = 1 ; i <= n ; i++){
		a[i] = read() ; 
		f[i][i] = 0 ; 
		if(i != 1){
			if(a[i] == a[i - 1])
			f[i - 1][i] =  0 ;
			else f[i - 1][i] = 1 ; 
		}
		
	}
	for(int len = 2 ; len <= n ; len++)
		for(int i = 1 ; i + len - 1 <= n ; i++){
			int j = i + len - 1 ; 
			if(a[i] == a[j]) f[i][j] = min(f[i + 1][j - 1] , f[i][j]) ;
			f[i][j] = min(f[i][j] , f[i + 1][j - 1] + 1) ; 
			f[i][j] = min(f[i][j] , f[i][j - 1] + 1 + 1) ; 
			f[i][j] = min(f[i][j] , f[i + 1][j] + 1 + 1) ; 
 		}
 	cout << f[1][n]; 
}



满分代码如下

#include<bits/stdc++.h>
using namespace std ;
#define maxn 3100
#define int long long
#define kkk signed main
inline int read(){
	int ans = 0 , f = 1 ; char ch = getchar() ;
	while ( ch < '0' || ch > '9') {	 if( ch == '-' )  f = -1 ; ch = getchar() ; }
	while ( ch >= '0' && ch <= '9' ) ans =  ( ans << 3 ) +  ( ans << 1 ) + ch - '0' , ch = getchar() ;
	return ans * f ;
}
#define re register int
#define lc (o << 1)
#define rc ((o << 1) | 1)
#define mid ((l + r) >> 1)
int n , a[maxn] ; 
int f[maxn][maxn] ; 
kkk(){
//	freopen("test.in" , "r" , stdin) ;
//	freopen("test.out" , "w" , stdout) ;
	memset(f , 127 , sizeof(f)) ; 
	n = read() ; 
	for(int i = 1 ; i <= n ; i++){
		a[i] = read() ; 
		f[i][i] = 0 ; 
		if(i != 1){
			if(a[i] == a[i - 1])
			f[i - 1][i] =  0 ;
			else f[i - 1][i] = 1 ; 
		}
		
	}
	for(int len = 2 ; len <= n ; len++)
		for(int i = 1 ; i + len - 1 <= n ; i++){
			int j = i + len - 1 ; 
			if(a[i] == a[j]) f[i][j] = min(f[i + 1][j - 1] , f[i][j]) ;
				else f[i][j] = min(min(f[i + 1][j] , f[i][j - 1]) , f[i + 1][j - 1]) + 1 ;
 		}
 	cout << f[1][n]; 
}



2020/9/8 16:56
加载中...