标签:block int 数字 开心 bool bsp 包括 long noip
我可能今天智商不在线?
读题读不懂?
让我们来看两段的描述:
如果你开开心心去写连续子段和,恭喜你~WA了。因为题目的意思是前面任意一个小朋友的数字的最大值(但要要保证连续)
如果你看到其特征值产生了疑惑,其到底是当前的小朋友本人,还是选择加的那个小朋友。不要着急请看样例。
#include <cstdio> #include <algorithm> #include <cstring> typedef long long ll; int n; ll a[1000005]; ll mod,dp[1000005],Max; ll Sum[1000005]; const int INF = 0x3f3f3f3f; int main(){ scanf("%d%lld",&n,&mod); for(int i=1;i<=n;++i){ scanf("%lld",&a[i]); dp[i] = std::max(dp[i-1]+a[i],a[i]); } for(int i=2;i<=n;++i){ dp[i] = std::max(dp[i-1],dp[i]); //printf("dp[%d]:%lld\n",i,dp[i]); //printf("i:%d - %lld\n",i,Max); } Sum[1] = dp[1]; Sum[2] = dp[1] + dp[1]; bool flag=0; //for(int i=1;i<=n;++i) printf("dp[%d]:%lld\n",i,dp[i]); for(int i=3;i<=n;i++){ Sum[i]+=Sum[i-1]; if(dp[i-1] > 0) Sum[i]+=dp[i-1]; if(Sum[i] > Sum[1]) flag=1; if(flag==1) Sum[i]%=mod; } //for(int i=1;i<=n;i++) printf("dp[%d]:%lld\n",i,Sum[i]); if(flag) printf("%lld\n",Sum[n]); else printf("%lld\n",Sum[1]); return 0; }
标签:block int 数字 开心 bool bsp 包括 long noip
原文地址:http://www.cnblogs.com/OIerLYF/p/7792602.html