A. Nasta Rabbara
B. Colored Blankets
C. Component Tree
D. Data Center
这个题
E. Election of a Mayor
F. Ilya Muromets
题目大意:给你一个长度为n的序列,要你从中找两个互不重叠的区间,且每个区间长度不能超过k,求这两个区间中元素和的最大值
比赛时被D和I题蒙蔽了,以为此题也是贪心,结果做了半天tried but failed,实际上此题是一道很巧妙的前缀和+DP题,令Dec[i]=以第i个元素为终点,长度为k的区间和,DP[i][j]=前i个头砍j次得到的最大分数,那么我们可以得到一个DP方程:
1、dp[i][1]=Dec[i],i∈[1,k]
2、dp[i][1]=max(dp[i-1][1],Dec[i]); //前i个头砍1次的计算:要么第i个头不砍,要么要砍第i个头
dp[i][2]=max(dp[i-1][2],Dec[i]+dp[i-k][1]); ////前i个头砍2次的计算:要么第i个头不砍,要么要砍第i个头
i∈(k,n]
就这么简单,但是比赛时居然把这题想复杂了,真的是很令人痛心
代码
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #define MAXN 201000 using namespace std; int f,dp[MAXN][4]; //dp[i][j]=前i个头砍j次的最大和 int Dec[MAXN]; //Dec[i]=以第i号元素截止的长度为k的区间和 int sum[MAXN]; int max(int a,int b) { if(a>b) return a; return b; } int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF) { memset(sum,0,sizeof(sum)); memset(dp,0,sizeof(dp)); memset(Dec,0,sizeof(Dec)); for(int i=1;i<=n;i++) { scanf("%d",&f); sum[i]=sum[i-1]+f; } if(n<=k*2) { printf("%d\n",sum[n]); //此时显然可以把所有的头都砍下来 continue; } dp[1][0]=0; dp[1][1]=sum[1]; for(int i=1;i<=k;i++) Dec[i]=sum[i]; for(int i=k+1;i<=n;i++) Dec[i]=sum[i]-sum[i-k]; for(int i=1;i<=k;i++) dp[i][1]=Dec[i]; for(int i=k+1;i<=n;i++) { dp[i][1]=max(dp[i-1][1],Dec[i]); //前i个头砍1次的计算:要么第i个头不砍,要么要砍第i个头 dp[i][2]=max(dp[i-1][2],Dec[i]+dp[i-k][1]); ////前i个头砍2次的计算:要么第i个头不砍,要么要砍第i个头 } printf("%d\n",dp[n][2]); } return 0; }
G. FacePalm Accounting
H. Minimal Agapov Code
I. Sale in GameStore
本次比赛中最水的题,题目大意是好朋友可以帮你为游戏买单,但是他替你付的钱必须小于等于你自己掏腰包花的钱,问你最多能买多少游戏。很明显这是个贪心,我们只需要买最贵的那个游戏,然后按价格从小到大选择游戏让朋友替你买单就OK了
代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #define MAXN 2010 using namespace std; int p[MAXN]; int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&p[i]); sort(p+1,p+n+1); int all=p[n],sum=0,cnt=1; for(int i=1;i<n;i++) { if(sum+p[i]<=all) { sum+=p[i]; cnt++; } else break; } printf("%d\n",cnt); } return 0; }
J. Getting Ready for VIPC
K. Treeland
L. Useful Roads
M. Variable Shadowing