[HDU 多校训练] Equal Sentences (2020第四场1005)

HDU Equal Sentences (2020杭电多校训练第四场1005)

HDU Equal Sentences
[HDU 多校训练] Equal Sentences (2020第四场1005)_第1张图片
根据题目,不难发现有一下的规律:
第i个和前一个比较,如果相等,就赋值为i-1的值
否则就dp[i-1]+dp[i-2]+1
存到第i就是有dp[i]+1个解

if(a[i]==a[i-1]) 
	dp[i]=dp[i-1];
else
	dp[i]=(dp[i-1]+dp[i-2]+1)%mod;

这边在多说一句,string的格式还是需要用cin去读取,scanf好像不行…
其他的废话不多说直接上AC代码

#include 
#define rep(i,a,b) for(int i=a;i
#define T int t ;cin >> t;while(t--)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
inline ll gcd(ll a,ll b){return b == 0? a:gcd(b, a % b);}
const int maxn = 1e5+10;
const int INF = 0x3f3f3f3f;
const double eps = 1e-11;
const ll mod = 1e9 + 7;
ll n ; 
string a[maxn] ;
ll dp[maxn] ;
int main()
{
	T
	{
		cin >> n ;
		ll ans = 0 ;
		memset(dp,0,sizeof(dp)) ;   //清空dp数组
		for(int i = 1 ; i <= n ; i++)
		{
			cin >> a[i] ;
		}
		dp[0] =0 ;dp[1] = 0 ;
		for(int i=2;i<=n;i++)
		{
			if(a[i]==a[i-1]) 
				dp[i]=dp[i-1];      
			else
				dp[i]=(dp[i-1]+dp[i-2]+1)%mod;
		}
		printf("%lld\n",dp[n]+1) ;
		
	}
	return 0 ;
}

你可能感兴趣的:(题解,杭电多校,dp)