没有合适的资源?快使用搜索试试~ 我知道了~
"暑假集训周报WEEK4" 在这周的集训周报中,我们将讨论三个具有代表性的算法问题:背包问题、纸牌问题和纪念品分组问题。这些问题都是经典的算法问题,都是NOIP(全国青少年信息学奥林匹克竞赛)中的常见题型。 背包问题 背包问题是一个经典的NP-hard问题,描述了阿里巴巴在藏宝洞中装走尽可能多价值的金币的情况。在这个问题中,我们需要使用动态规划算法来解决问题。我们需要将金币按照单位价格从高到低排序,然后使用贪心算法来选择尽可能多价值的金币。这个问题的时间复杂度为O(nlogn),空间复杂度为O(n)。 纸牌问题 纸牌问题是一个经典的搜索问题,描述了如何移动纸牌使每堆纸牌数都一样多。这个问题可以使用BFS(广度优先搜索)或DFS(深度优先搜索)来解决。在这个问题中,我们需要搜索所有可能的纸牌移动方式,直到找到使每堆纸牌数都一样多的最少移动次数。这个问题的时间复杂度为O(n!),空间复杂度为O(n)。 纪念品分组问题 纪念品分组问题是一个经典的贪心算法问题,描述了如何将纪念品分组使每组纪念品的价格之和不超过一个给定的整数。这个问题可以使用贪心算法来解决。在这个问题中,我们需要将纪念品按照价格从高到低排序,然后使用贪心算法来选择尽可能多的纪念品使每组纪念品的价格之和不超过给定的整数。这个问题的时间复杂度为O(nlogn),空间复杂度为O(n)。 这三个问题都是经典的算法问题,都是NOIP中的常见题型。为了解决这些问题,需要使用不同的算法技术,如动态规划、搜索和贪心算法。
资源推荐
资源详情
资源评论
Input Output
4 50 10 60 20 100 30 120 15 45 240.00
WEEK4
A-部分背包问题
Description
阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100) 堆金币,第 i 堆金币的总重量和总价值分别是
mi,vi(1≤mi,vi≤100)。阿里巴巴有一个承重量为 T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他
想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问
阿里巴巴最多可以拿走多少价值的金币?
Input
第一行两个整数 N,T。
接下来 N 行,每行两个整数 mi,vi。
Output
一个实数表示答案,输出两位小数
Sample 1
#include<bits/stdc++.h>
using namespace std;
struct dui{
double m,v,p;
}a[105];
bool cmp(dui a,dui b){
return a.p > b.p;
}
int main(){
int n,t;
cin >> n >> t;
for(int i = 0; i < n; i++){
cin >> a[i].m >> a[i].v;
a[i].p = a[i].v / a[i].m;
}
sort(a,a+n,cmp);
double sum = 0;
for(int i = 0; i < n; i++){
Input Output
4 9 8 17 6 3
B - 均分纸牌
洛谷 - P1031
Description
有 N 堆纸牌,编号分别为 1,2,…,N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,
然后移动。
移牌规则为:在编号为 11 堆上取的纸牌,只能移到编号为 22 的堆上;在编号为 N 的堆上取的纸牌,只能移到编
号为 N−1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如N=4 时,44 堆纸牌数分别为 9,8,17,69,8,17,6。
移动 33 次可达到目的:
从第三堆取 44 张牌放到第四堆,此时每堆纸牌数分别为 9,8,13,109,8,13,10。
从第三堆取 33 张牌放到第二堆,此时每堆纸牌数分别为 9,11,10,109,11,10,10。
从第二堆取 11 张牌放到第一堆,此时每堆纸牌数分别为 10,10,10,1010,10,10,10。
Input
第一行共一个整数 N,表示纸牌堆数。
第二行共 N 个整数 A1,A2,…,AN,表示每堆纸牌初始时的纸牌数。
Output
共一行,即所有堆均达到相等时的最少移动次数。
Sample 1
Hint
对于 100%100% 的数据,1≤N≤100,1≤Ai≤10000。
if(a[i].m <= t){
sum += a[i].v;
t -= a[i].m;
}
else if(t > 0){
sum += t * a[i].p;
break;
}
}
printf("%.2f",sum);
return 0;
}
【题目来源】
NOIP 2002 提高组第一题
D - 纪念品分组
洛谷 - P1094
Description
元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均
衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超
过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
Input
共 n+2 行:
第一行包括一个整数 w,为每组纪念品价格之和的上限。
第二行为一个整数 n,表示购来的纪念品的总件数 G。
第 3∼n+2 行每行包含一个正整数 Pi 表示所对应纪念品的价格。
Output
一个整数,即最少的分组数目。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int a[105] = {0};
int sum = 0;
for(int i = 1; i <= n; i++){
cin >> a[i];
sum += a[i];
}
sum = sum / n;
int cnt = 0;
//每次都向右移
for(int i = 1; i <= n; i++){
if(a[i] != sum){
cnt++;
a[i+1] += a[i] - sum;
}
}
cout << cnt;
return 0;
}
Input Output
100 9 90 20 20 30 50 60 70 80 90 6
Sample 1
Hint
50%50% 的数据满足:1≤n≤15。
100%100% 的数据满足:1≤n≤3×104,80≤w≤200,5≤Pi≤w。
E - 混合牛奶 Mixing Milk
洛谷 - P1208
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 3e4 + 5;
int a[N];
int main(){
int w,n;
cin >> w >> n;
for(int i = 0; i < n; i++){
cin >> a[i];
}
sort(a,a+n);
int cnt = 0;
int i = 0;
int j = n-1;
while(i <= j){
if(a[i] + a[j] <= w){
i++;
j--;
cnt++;
}
else{
j--;
cnt++;
}
}
cout << cnt;
return 0;
}
Input Output
100 5 5 20 9 40 3 10 8 80 6 30 630
Description
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购
方案。
Marry 乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格可能相同。此外,就像每头奶
牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天 Marry 乳业可以从奶农手中采购
到小于或者等于奶农最大产量的整数数量的牛奶。
给出 Marry 乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最
小花费。
注:每天所有奶农的总产量大于 Marry 乳业的需求量。
Input
第一行二个整数 n,m,表示需要牛奶的总量,和提供牛奶的农民个数。
接下来 m 行,每行两个整数 pi,ai,表示第 i 个农民牛奶的单价,和农民 i 一天最多能卖出的牛奶量。
Output
单独的一行包含单独的一个整数,表示 Marry 的牛奶制造公司拿到所需的牛奶所要的最小费用。
Sample 1
Hint
【数据范围】
对于 100%100% 的数据:
0≤n,ai≤2×106,0≤m≤5000,0≤pi≤1000
题目翻译来自 NOCOW。
USACO Training Section 1.3
#include<bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5;
struct farmer
{
int p,a;
}f[N];
bool cmp(farmer a,farmer b){
return a.p < b.p;
}
int main(){
int n,m;
cin >> n >> m;
剩余64页未读,继续阅读
资源评论
bulubulu!
- 粉丝: 7
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功