Uva1149】的更多相关文章

题意:给定N个物品的重量Li  背包的容量M 同时要求每个背包最多装两个物品 求至少要多少个背包才能装下所有物品 简单贪心  注意输出: #include<bits/stdc++.h> using namespace std; #define N 200000+5 int n,w; int a[N]; int main() { int cas;cin>>cas; while(cas--) { cin>>n>>w; ;i<n;i++) scanf(&qu…
题目大意:给定n个物品的重量,无限个容量为m的箱子,每个箱子最多装两个物品,要把所有的物品都装下,最少需要多少个箱子. 题目分析:贪心策略:每次将最重和最轻的两个物品放到一个箱子里,如果装不下,则将最重的单独装到一个箱子里. 代码如下: # include<iostream> # include<cstdio> # include<cstring> # include<algorithm> using namespace std; int a[100005]…
每个bin最多只能放两个,所以最佳的贪心策略是从大的开始放,如果有空间放第二个,尽量放最大的. #include <bits/stdc++.h> using namespace std; + ; int t; int n,l; int a[maxn]; int b[maxn]; int flag[maxn]; void solve(){ ; memset(flag, , sizeof(flag)); ; i <= n; ++i){ if(flag[i]){ continue; } els…
做法显然:贪心,但是怎么贪? 首先从大到小或从小到大排序,窝这次是从大到小排,这样更容易理解(从小到大更方变) 然后设置两个变量 front 和 after 作为前指针和后指针. 循环判断: 当前后两个数能放入背包时,则 ans++ 并把两指针: front++; after--; 当不能同时放入时,放进大的那个,也就是前面的那个,并且 ans++, front++; 最后看一下code: #include<iostream> #include<cstdio> #include&l…
https://vjudge.net/problem/UVA-1149 题意:给定N个物品的重量和背包的容量,同时要求每个背包最多装两个物品.求至少需要的背包数. 思路:很简单的贪心.每次将最轻的和最重的放一个背包里,如果放不下,则只放一个最重的. #include<iostream> #include<algorithm> using namespace std; + ; int n, m; int a[maxn]; int ans; void solve() { ans = ;…