欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷-P5019 铺设道路+某高校同步赛-减成一

程序员文章站 2022-05-12 11:41:09
...

传送门:P5019 铺设道路

#include<bits/stdc++.h>
#define N 100005
using namespace std;
int a[N];          //全局可以保证a[0]=0,否则循环和if语句会错
int main()
{
	int n,i,ans=0;
	scanf("%d",&n);
	for(i=1;i<=n;++i)
	{
		scanf("%d",&a[i]);
		if(a[i]>a[i-1])  ans+=a[i]-a[i-1];
	}
	printf("%d",ans);
	return 0;
}

减成一题解:
洛谷-P5019 铺设道路+某高校同步赛-减成一

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;

int n,a[MAXN];
long long dp[MAXN];
int t;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1; i<=n; ++i)
            scanf("%d",&a[i]);
        for(int i=1; i<=n; ++i)
        {
            dp[i]=dp[i-1];
            if(a[i]>a[i-1])
                dp[i]+=a[i]-a[i-1];
        }
        cout<<dp[n]-1<<endl;
    }
}

你看其实这个代码就是上面那个代码稍微改了一点,主体完全没有变,他说全减成1,而第一个题是全减成0,所以我们在最后的dp[n]要再减去1;减成n就dp[n]再减n.