【DP】LibreOJ NOI Round #1[A.接竹竿]题解
2017-07-07 14:50
246 查看
题目概述
有n张牌,每张牌有一种花色c和一个权值v。如果两张牌花色相同就可以把两张牌间的牌都拿光(包括这两张)并得到所有牌的权值加和。求最大权值。解题报告
一看就是线性DP啊,定义f[i]表示前i个的最优解,那么转移方程就是f[i]=max{f[j-1]-sum[j-1]+sum[i]|c[i]=c[j]}。然后我们发现f[j-1]-sum[j-1]只和j有关,与i无关,所以我们只需要记录MAX[i]表示颜色i目前的max{f[j-1]-sum[j-1]},每次更新就行了。但是考试的时候我一看,哇NOI难度的第一题(汗)我竟然能水60分,于是暴力做了之后就没去管了,结果之后发现水上天了,下次再也不能这样了T_T。
示例程序
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int maxn=1000000,maxk=1000000; int n,K,col[maxk+5]; LL sum[maxn+5],f[maxn+5],MAX[maxk+5]; bool Eoln(char ch) {return ch==10||ch==13||ch==EOF;} char readc() { static char buf[100000],*l=buf,*r=buf; if (l==r) r=(l=buf)+fread(buf,1,100000,stdin); if (l==r) return EOF; else return *l++; } int readi(int &x) { int tot=0,f=1;char ch=readc(),lst='+'; while ('9'<ch||ch<'0') {if (ch==EOF) return EOF;lst=ch;ch=readc();} if (lst=='-') f=-f; while ('0'<=ch&&ch<='9') tot=tot*10+ch-48,ch=readc(); x=tot*f; return Eoln(ch); } int main() { freopen("program.in","r",stdin); freopen("program.out","w",stdout); readi(n);readi(K); for (int i=1;i<=n;i++) readi(col[i]); for (int i=1,x;i<=n;i++) readi(x),sum[i]=sum[i-1]+x; memset(MAX,192,sizeof(MAX)); for (int i=1;i<=n;i++) { f[i]=max(f[i-1],MAX[col[i]]+sum[i]); MAX[col[i]]=max(MAX[col[i]],f[i-1]-sum[i-1]); } return printf("%lld\n",f ),0; }
相关文章推荐
- LibreOJ NOI Round #1 Day 1 B. 失控的未来交通工具
- [DP]LOJ NOI Round #1——接竹竿
- LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律
- LibreOJ NOIP Round #1 —— 蒟蒻总结&部分题解
- Round 3 D - Balance POJ - 1837 -树形DP
- Educational Codeforces Round 39-D-Timetable(背包DP)
- [BZOJ1499][NOI2005][DP+优化]瑰丽华尔兹
- Codeforces Beta Round #2_B. The least round way(DP)
- 【HDU5568 BestCoder Round 63 (div1)A】【DP java高精度】sequence2 长度恰好为m的LIS数
- 多叉树转二叉树+树形dp(codevs 1746 贪吃的九头龙 2002noi)
- BZOJ 2435 [Noi 2011] 树DP 解题报告
- AIM Tech Round 3 (Div. 1) C. Centroids(树形dp)
- dp - Google Code jam Qualification Round 2015 --- Problem B. Infinite House of Pancakes
- BZOJ 1509: [NOI2003]逃学的小孩( 树形dp )
- BZOJ2435 [Noi2011]道路修建 【树形Dp 吧。。】
- 【bzoj1495】[NOI2006]网络收费 暴力+树形背包dp
- BZOJ1495 [NOI2006]网络收费 【树形dp + 状压dp】
- Codeforces Round #336 (Div. 2) 608D Zuma(dfs+dp)
- 【BZOJ1415】【NOI2005】聪聪与可可(期望dp+预处理)
- (KMP、dp)Codeforces Educational Codeforces Round 21 G-Anthem of Berland