nyoj 笨蛋的难题()二 题解
来源:互联网 发布:js选择框选择触发事件 编辑:程序博客网 时间:2024/04/29 23:43
/*
这是我开始的做法,两层循环,
其实存在思路不够好,存在大量冗余,导致时间超了
#include<iostream>using namespace std;#include<cstdio>#include<cstring>#include<cstdlib>#define N 125int n;int sum[N];int f[N],a[N],d[N],r[N];int main(){ while (~scanf("%d",&n)) { int i,j,t,k; for (i=1;i<=n;++i) { scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; } f[n]=a[n]; d[n]=n; r[n]=0; for (i=n-1;i>0;--i) { for (j=i;j<=n;++j) if (f[i]<a[j]+r[j+1]) { f[i]=a[j]+r[j+1]; d[i]=j; } k=i; t=0; while (k<=n) { t+=sum[d[k]-1]-sum[k-1]; k=d[k]+1; } r[i]=sum[n]-sum[i-1]-t-f[i]; } printf("%d %d %d \n",f[1],r[1],t); memset(sum,0,sizeof(sum)); memset(f,0,sizeof(f)); memset(d,0,sizeof(d)); memset(r,0,sizeof(r)); } return 0;}
*/
/*
正解应该是dp,类似于最大子串和, 实现时通过降维可以不用数组
两个数组f[i],g[i],分别表示笨蛋和傻子从第i小时开始的最大工资
f[i]=max(g[i-1]+a[i],f[i-1])
如果f[i]= g[i-1]+a[i],则g[i]=f[i-1]
显然可以降维,不用数组,用两个变量即可。
*/
#include<iostream>using namespace std;#include<cstdio>#include<cstring>#include<cstdlib>#define N 125int n,sum;int a[N];int main(){ while (~scanf("%d",&n)) { int i,j,t,k; sum=0; for (i=1;i<=n;++i) { scanf("%d",&a[i]); sum=sum+a[i]; } int max1=0,max2=0,tmp; for (i=n;i>0;--i) if (a[i]+max2>=max1) { tmp=max1; max1=a[i]+max2; max2=tmp; } printf("%d %d %d\n",max1,max2,sum-max1-max2); } return 0; }
0 0
- nyoj 笨蛋的难题()二 题解
- NYOJ 625 笨蛋的难题(二)
- NYOJ 625 笨蛋的难题(二)
- NYOJ 625 笨蛋的难题(二)(DP)
- NYOJ 625 笨蛋的难题(二)
- 笨蛋的难题(二)
- 笨蛋的难题(二)
- NYOJ笨蛋的难题(一)
- NYOJ 题目625 笨蛋的难题(二)(动态规划,技巧)
- NYOJ 笨蛋的难题(四)(排列比较)
- nyoj-739-笨蛋的难题(线段树,RMQ算法)
- NYOJ 624 笨蛋的难题(一)
- nyoj 739 笨蛋的难题四
- nyoj-739-笨蛋难题四
- NYOJ 739 笨蛋难题四
- NYOJ 739 笨蛋难题四
- NYOJ 739 笨蛋难题四
- nyoj 739笨蛋难题四
- C++ ERROR集合
- [HDOJ 4799][BNUOJ 34021] LIKE vs CANDLE [树形DP]
- Xcode 5.x添加Command Line Tools
- IE上不了网的几个原因?
- 校园edu无网络访问解决方案
- nyoj 笨蛋的难题()二 题解
- E - Speed Limit(2.1.1)
- 心得
- NanShan 即时通讯 为了使ubuntu14.04更适合广大群体
- 摄像机成像、畸变模型
- Git基础学习
- 【POJ】1094 Sorting It All Out 拓扑排序
- 在VS中安装/使用 MVVMLight
- Android MediaPlayer Error -1004