P2240 【深基12.例1】部分背包问题】的更多相关文章

P2240 [深基12.例1]部分背包问题 题目描述 阿里巴巴走进了装满宝藏的藏宝洞.藏宝洞里面有 N(N \le 100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 m_i,v_i(1\le m_i,v_i \le 100)m**i,v**i(1≤m**i,v**i≤100).阿里巴巴有一个承重量为 T(T \le 1000)T(T≤1000) 的背包,但并没办法将全部的金币都装进去.他想装走尽可能多价值的金币.所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价…
首先应该注意几个关键信息:装走尽多的金币.所有金币可以随意分割并且分割后金币的价值比不变; 我们可以抽象成一个买东西的场景,给你一定数目的钱,让你在这些钱内尽量在超市买更多的小零食,这就牵扯到了一个性价比的问题. 那如此,这个题目就好解决了,就用这个背包尽量装更多的金币,如果可以装的下,那就装好了,毕竟谁不喜欢钱呢: 那如果装不下呢(对于第i堆金币)? 这个就可以把金币分割了,在剩下的背包容量中装可以装满的金币,用它的装载量去乘金币的价值比,就是所获得的金币的量: 代码如下: #include<…
P4715 [深基16.例1]淘汰赛 题目描述 有 2^n(n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节.我经知道各个国家的能力值,且都不相等.能力值高的国家和能力值低的国家踢比赛时高者获胜.1 号国家和 2 号国家踢一场比赛,胜者晋级.3 号国家和 4 号国家也踢一场,胜者晋级--晋级后的国家用相同的方法继续完成赛程,直到决出冠军.给出各个国家的能力值,请问亚军是哪个国家? 输入格式 无 输出格式 无 输入输出样例 输入 3 4 2 3 1 10 5 9 7 输出 1 思路1 把 nn 支…
题目:P4715 [深基16.例1]淘汰赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题因为数据范围不大,所以做法可以非常简单,使用一个vector加上pair就可以了: (实际上可以预处理2的次方数,但因为懒就直接用pow()了) 做法就是每次按顺序比较当前国家数的一半次,期间输掉的国家直接用erase()踢掉! 代码: #include <iostream> #include <cmath> #include <vector> using…
题目连接: P5706 [深基2.例8]再分肥宅水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我提交的: 1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 int main(){ 5 float a; 6 int b; 7 cin >> a >> b; 8 9 cout << setprecision(3) << a / b &l…
题面 题解 考场上蠢了--这么简单的东西都想不到-- 首先排序加去重. 先来考虑一下,形如 \[a_1x_1+a_2x_2+...a_nx_n=w,a_1<a_2<...<a_n,x_i\geq 0\] 的方程该怎么判断是否有解 首先,把两边都放到模\(a_1\)的意义下,就是 \[a_2x_2+...a_nx_n\equiv w\pmod{a_1}\] 然后是一个神仙的转化,我们设有\(a_1\)个点,分别代表\(0,1,...,a_1-1\),对于每一个点\(u\),都连出去\(n-…
传送门 题目大意 往一个\(a[i][j]\) 里边放东西,也可以取走东西,然后查询\(a[i][j]\)里边是什么东西. 思路: 显然我们可以暴力,但是你开不了那么大的数组. 翻了翻dalao们的题解,为什么要用结构体呢?? 直接\(map\)他不香吗? 我们用一个\(map<int,int> ma[N];\)当做暴力的数组来做. 因为\(map\)如这个STL如果不访问的话是不是占空间的,那么我们就可以为所欲为A掉这个题了. code: #include <bits/stdc++.h…
链接:Miku -------------------- 欸,为什么我第一遍没过 -------------------- #include<iostream> using namespace std; int n; ]; ; int main(){ cin>>n; ans[l]=n; ) cout<<; ){ l++; ) n=n*+; else n=n>>; ans[l]=n; } ;--i){ cout<<ans[i]<<&qu…
题目传送门 思路 介绍一种新方法--sort排序,它的格式是这样的sort(a+1,a+n+1,cmp);,我们只需要把a数组排好序,然后输出第\(1\)个元素即可. 定义a数组与变量\(n\)并输入. int a[1000000]; int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; 使用sort对a数组进行排序. sort(a+1,a+n+1); 输出第一个元素\(a_1\). cout<<a[1]; 参考代码 #i…
题目传送门 思路 仔细读题后,我们可以发现,输出可以分成\(2\)种情况,apple加s与apple不加s,所以我们可以使用if/else来实现. 接着,我们读入n. int n; cin>>n; 进行判断,是否需要加s if(n==1 || n==0) cout<<"Today, I ate "<<n<<" apple."; else cout<<"Today, I ate "<…