【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
写个DP
设f[j]表示已经做的题的状态为j的情况下接着选能获得的最大分数。
显然是个倒推。
记忆化搜索一波
dfs(i,j) 表示当前选了i个题,已选状态为j。
(当然这个i可以不用写。因为可以看看j的二进制形式中1的个数来表示i
然后枚举j状态下,下一个要选哪个题。
f[j]的话。就是max({f[nextj]+dep*a[i]+b[i]}当然也可能接下来就不选了。所以f[j] = max(f[j],0);
**注**
这题正着来好像不太好做。
f[j]如果表示为已经做题状态为j的情况下的最大值的话。
f[nextj]不一定只能由f[j]来获得。
感觉就很麻烦吧。。
逆着来的话。
对于f[j]它的所有可能的nextj是固定的。
所以可以直接取max(f[nextj]+转移对应的a[i],b[i]);
且这个nextj有单调性。因为1的个数一直在递增。所以没有后效性。
【代码】
#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x)
#define rson mid+1,r,rt<<1|1
using namespace std;
const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 20;
int n;
LL a[N+10],b[N+10];
int statu[N+10];
LL dp[(1<<20)+5];
LL dfs(int dep,int status){
if (dp[status]!=-1) return dp[status];
LL ma = 0;
rep1(i,1,n){
int statu1 = status>>(i-1);
statu1&=1;
if (statu1>0) continue;
statu1 = status&statu[i];
if (statu1!=statu[i]) continue;
statu1 = status|(1<<(i-1));
ma = max(ma,dfs(dep+1,statu1)+1LL*a[i]*dep+b[i]);
}
return dp[status] = ma;
}
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
scanf("%d",&n);
for (int i = 1;i <= n;i++){
scanf("%lld%lld",&a[i],&b[i]);
int x;
scanf("%d",&x);
rep1(j,1,x){
int y;
scanf("%d",&y);
statu[i]|=(1<<(y-1));
}
}
memset(dp,255,sizeof dp);
printf("%lld\n",dfs(1,0));
return 0;
}
【ACM-ICPC 2018 南京赛区网络预赛 E】AC Challenge的更多相关文章
- ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge(状压dp)
https://nanti.jisuanke.com/t/30994 题意 给你n个题目,对于每个题目,在做这个题目之前,规定了必须先做哪几个题目,第t个做的题目i得分是t×ai+bi问最终的最大得分 ...
- ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge 状压DP
题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest with n (0 < n \le 20)n(0& ...
- ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge (状态压缩DP)
Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answe ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- ACM-ICPC 2018 南京赛区网络预赛 E题
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
- ACM-ICPC 2018 南京赛区网络预赛B
题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...
- 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)
J. Sum 26.87% 1000ms 512000K A square-free integer is an integer which is indivisible by any squar ...
- 计蒜客 30996.Lpl and Energy-saving Lamps-线段树(区间满足条件最靠左的值) (ACM-ICPC 2018 南京赛区网络预赛 G)
G. Lpl and Energy-saving Lamps 42.07% 1000ms 65536K During tea-drinking, princess, amongst other t ...
- 计蒜客 30990.An Olympian Math Problem-数学公式题 (ACM-ICPC 2018 南京赛区网络预赛 A)
A. An Olympian Math Problem 54.28% 1000ms 65536K Alice, a student of grade 66, is thinking about a ...
- ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
题目链接:https://nanti.jisuanke.com/t/30991 2000ms 262144K Feeling hungry, a cute hamster decides to o ...
随机推荐
- [Javascript] Getter and Setter Abstractions
JavaScript provides primitive types and means of processing those. However, those are not enough. Re ...
- Android----获得当前应用包名、当前activity的名字、推断是否是系统桌面、service类
1.获得当前应用包名 public static String getRunningActivityName(Context context) { ActivityManager activityMa ...
- 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 比如输入一个长度为9的数组{1,2.3.2,2.2.5,4.2}, 因为数组中数字2出现了5次,超过数组的长度的一半,因此输出2 ...
- 分享3个Putty配色方案【转】
本文转载自:https://www.coder4.com/archives/1506 分享3个Putty配色方案 4 Replies 虽然服务器都是Linux的,平时也基本用Linux,但是难免还是要 ...
- 11.修改WSDL文档
http://localhost:8077/person?wsdl可以由你来控制的.拿Person这个例子来说.
- Java IO-InputStream家族 -装饰者模式
最近看到一篇文章,初步介绍java.io.InputStream,写的非常通俗易懂,在这里我完全粘贴下来. 来源于 https://mp.weixin.qq.com/s/hDJs6iG_YPww7ye ...
- 用WPF做关于MEF 简单学习记录
写在前面:下面学习所得多是从自http://www.cnblogs.com/comsokey/p/MEF1.html和http://www.cnblogs.com/yunfeifei/p/392266 ...
- Webpack 中的 Tree Shaking
Tree Shaking Tree shaking 用于描述移除JavaScript上下文中的未引用代码(dead-code). 为了更方便地理解tree shaking,我们可以将应用程序想象成一棵 ...
- BZOJ 2729 高精度+组合数学
思路: 考虑 把男生排成一排 女生和老师往里插 分成两种情况. 1. 女生中间夹着老师 2. 女生中间没有夹着老师 求一下组合* 阶乘就好了 先放Python代码 简洁易懂 def fact(n): ...
- SDAutoLayout的使用
## 简介- IOS布局的三个阶段:MagicNumber -> AutoResizingMask -> AutoLayout- 自动布局三大框架:UILayoutConstraint(原 ...