7 条题解

  • 1
    @ 2023-3-1 19:30:58

    这题解呢啊,本来是要前几个星期前就写的,但是因为某些原因,推迟了。

    好,接下来进入正题

    这题的确啊,就是DP

    定义dp[i]dp[i]表示阿福打劫到第ii个店时的最大金额

    好,我们直接看状转:dp[i]=max(dp[i1],dp[i2]+a[i]);dp[i]=max(dp[i-1],dp[i-2]+a[i]);

    因为必须要至少隔开一个店铺所以呢状转就得写成这样。

    好,最后再来设置一下边界 dp[1]=a[1];dp[1]=a[1];就完成了

    附上ACCODEACCODE

    #include<bits/stdc++.h>
    using namespace std;
    long long dp[100005];
    int main()
    {
    	long long t,n;
    	cin>>t;
    	for(long long p=0;p<t;p++)
    	{
    		memset(dp,0,sizeof(dp));
    		cin>>n;
    		long long a[n+1];
    		long long o; 
    		for(long long i=1;i<=n;i++)
    		{
    			cin>>a[i]; 
    		} 
    		dp[1]=a[1];
    		for(long long i=2;i<=n;i++)
    		{
    			dp[i]=max(dp[i-1],dp[i-2]+a[i]);
    		}
    		cout<<dp[n]<<endl;
    	}
    }
    

    $\LaTeX$666

信息

ID
2800
时间
1000ms
内存
128MiB
难度
6
标签
递交数
366
已通过
112
上传者