拼题A打卡奖励 (25 分),1355D,1362C;
7-2 拼题A打卡奖励 (25 分)(背包)
题意:
求,从 n 个物品中选(每个物品有体积 vi, 价值 wi ),总体积不超过 m 的最大价值?
n≤1e3,m≤7e5,vi≤600,wi≤30n ≤1e3, m ≤7e5, vi ≤600, wi ≤30n≤1e3,m≤7e5,vi≤600,wi≤30。
思路:
如果按照经典套路:求总体积不超过m的最大价值:
先枚举所有物品,再枚举所有体积,这样时间复杂度为O(n*m),超时。
所以,需要转换一下:因为最大总价值不超过 wi∗n=3e4wi*n=3e4wi∗n=3e4,所以:
求总价值恰好为 m 时的,最小体积。
先枚举所有物品,再枚举所有价值,这样的复杂度为 n∗wi∗n=3e7n*wi*n=3e7n∗wi∗n=3e7,可以。
最后遍历所有价值,看价值最大能够到达多少,使得最小体积不超过 m。
状态表示:f[j]f[j]f[j],总价值恰好为 j 的最小体积。
初始化:因为求最小值,所以一开始初始化为正无穷。
但是要注意,f[0] 要赋值为 0:总价值为0,最小体积为0。
状态转移:
前面枚举价值 j,从大到小循环,最小到 w[i]
f[j] = min(f[j], f[j-w[i]]+v[i])
Code:
const int N = 200010;
int T, n, m, a[N];
int v[N],w[N],f[N];int main(){cin>>n>>m;int sum=0;for(int i=1;i<=n;i++) cin>>v[i];for(int i=1;i<=n;i++) cin>>w[i],sum+=w[i];mem(f,0x3f);f[0]=0;for(int i=1;i<=n;i++){for(int j=sum;j>=w[i];j--){f[j]=min(f[j],f[j-w[i]]+v[i]);}}while(f[sum]>m) sum--;cout<<sum;return 0;
}
这是求,总体积恰好为 j 时,总价值的最小值;
还可以求,总体积至少为 j 时,总价值的最小值:
和上面问题相同之处:状态表示:
f[j]f[j]f[j],总体积至少为 j 时,总价值的最小值。
但是不同之处:状态转移:
- 当 j ≥ v[i] 时,说明总体积至少为 j,且大于当前物品体积,当前物品可选可不选。
当前物品不选,状态更新:从前 i-1 个位置选,总体积至少为 j。
当前物品选,状态更新:从前 i-1 个位置选,总体积至少为 j-v[i],再加上当前物品的价值w[i]。 - 当 j < v[i] 时,说明总体积至少为 j,且小于当前物品体积。
和原来的完全背包不同的是,这里的j是最小的总体积,可以小于当前体积,也就是说当前的物品也是可以拿的!
当前物品不选,状态更新:从前 i-1 个位置选,总体积至少为 j。
当前物品选,状态更新为当前物品的价值!
这种状态下就不能从前 i-1 种物品中选,使得总体积至少为 j-v[i]。因为当前 j-v[i] 是小于0的。所以这个状态就直接更新成当前物品的价值。
Code:
mem(f,0x3f,sizeof f);f[0]=0;for(int i=1;i<=n;i++){for(int j=m;j>=0;j--){if(j>=v[i]) f[j]=min(f[j],f[j-v[i]]+w[i]);else f[j]=min(f[j],w[i]);}}
例题:
P2918 [USACO08NOV]Buying Hay S
精卫填海
1355D. Game With Array(思维)
题意:
给出n,m。
要构造一个长度为n,总和为m的数列。
同时还要给出一个数k,满足没有连续的位置之和为 k 或者 m-k。
问,能否构造成功?
思路:
如果m ≥ 2*n的话,能够构造成功。
前n-1个位置设为2,最后一个位置补差。令k=1。
这样,k不能找到,m-k 也不能找到。
Code:
const int N = 200010, mod = 1e9+7;
int T, n, m, a[N];int main(){cin>>n>>m;if(m>=n*2){cout<<"YES\n";for(int i=1;i<n;i++) cout<<2<<" ";cout<<m-(n-1)*2<<endl;cout<<1;}else{cout<<"NO\n";}return 0;
}
1362C. Johnny and Another Rating Drop(规律,进制)
题意:
定义两个数的贡献为其二进制中,对应位不同的位置个数。
给一个数n,判断1~n中,所有相邻数的贡献之和位多少?
思路:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011发现规律:
第0位,贡献数为n;
第1位,贡献数为n/2;
第2位,贡献数为n/2/2;
第3位,贡献数为n/2/2/2...
Code:
const int N = 200010;
ll T, n, m, a[N];int main(){cin>>T;while(T--){cin>>n;ll ans=0;while(n){ans+=n;n/=2;}cout<<ans<<endl;}return 0;
}
挺难想到的。
对于这样的二进制找规律的题,应该想到从每一位下手,而不是看整个数。
拼题A打卡奖励 (25 分),1355D,1362C;相关推荐
- L3-2 拼题A打卡奖励 (30 分)
Powered by:NEFU AB-IN Link 文章目录 L3-2 拼题A打卡奖励 (30 分) 题意 思路 代码 L3-2 拼题A打卡奖励 (30 分) 题意 拼题 A 的教超搞打卡活动,指定 ...
- 天梯22模拟 L3-2 拼题A打卡奖励 (30 分)
L3-2 拼题A打卡奖励 (30 分) 拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 m i 分钟做完,完成后可获得 c i 枚奖励的金币.活动规定每张打卡卷最多只能做一次, ...
- 7-2 拼题A打卡奖励 dp
7-2 拼题A打卡奖励 分数 25 作者 陈越 单位 浙江大学 拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 m i 分钟做完,完成后可获得 c i 枚奖励的金币.活 ...
- PTA模拟赛 拼题A打卡奖励
拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 mi 分钟做完,完成后可获得 ci 枚奖励的金币.活动规定每张打卡卷最多只能做一次,并且不允许提前交卷.活动总时长为 M 分 ...
- [dp]拼题A打卡奖励 2021RoboCom复赛B
拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 mi 分钟做完,完成后可获得 ci 枚奖励的金币.活动规定每张打卡卷最多只能做一次,并且不允许提前交卷.活动总时长为 M 分 ...
- 2021 RoboCom 复赛 7-2 拼题A打卡奖励(背包)
样例输入: 5 110 70 10 20 50 60 28 1 6 18 22 样例输出: 40 分析:一开始看这道题我以为就是一个普通的背包问题,然后我就按照普通的背包问题写了代码,交上后发现有几个 ...
- PTA-拼题A打卡奖励
拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 mi 分钟做完,完成后可获得 ci 枚奖励的金币.活动规定每张打卡卷最多只能做一次,并且不允许提前交卷.活动总时长为 M 分 ...
- 19年冬季第二题 PAT甲级 1166 Summit (25分)
7-3 Summit (25分) A summit (峰会) is a meeting of heads of state or government. Arranging the rest area ...
- PAT乙级刷题之路1055 集体照 (25分)
1055 集体照 (25分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何 ...
最新文章
- 数据结构编程实战汇总
- apn java_android设置移动联通电信wap接入点
- 如何编译和运行C++程序
- 「镁客早报」特朗普复活美国太空指挥部;ATT的5G网络在美国12个城市上线
- switch和if的比较
- 计算机控制系统开卷试卷,13自动化计算机控制技术考试A卷
- nginx负载均衡常用的策略
- C 怎么读取Cpp文件_python之调用C加速计算(一)
- 牛津大学最新调研:AI面临基准危机,NLP集中“攻关”推理测试
- 过滤你不想看见的网页里的东西
- 如何应对冬季暴涨的体重
- hibernate在不联网或者网络异常时不能解析配置文件
- 基本sql语句--增删改查
- 【转】Add a user/Administrator to Windows Server 2008
- 用什么的SQL语句来查的一个表中有相同的记录条数
- UIImageView的内容模式以及ImageNamed和imageWithContentsOfFile的区别
- 制作属于你的终端词典
- 股指期货真是个好东西
- 如何做一名优秀的程序员?
- 知识图谱-KGE-语义匹配-双线性模型-2019:QuatE