背包问题
来源:互联网 发布:spring切面编程 注解 编辑:程序博客网 时间:2024/09/21 06:34
- 输入
- 第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;
随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。 - 输出
输出每组测试数据中背包内的物品的价值和,每次输出占一行。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
struct bag
{
int v;
int w;
}b[10];
int cmp(const void *a, const void *b)
{
return (*(struct bag*)b).v>(*(struct bag*)a).v ? 1 : -1;
}
int main()
{
int t, s, m, i, sum, count;
cin >> t;
while (t--)
{
sum = 0; count = 0;
cin>>s>>m;
for (i = 0; i<s; i++)
cin>>b[i].v>>b[i].w;
qsort(b, s, sizeof(b[0]), cmp);
for (i = 0; i<s; i++)
{
if (sum + b[i].w <= m)
{
count += b[i].v*b[i].w;
sum += b[i].w;
}
else
{
count += b[i].v*(m - sum);
break;
}
}
printf("%d\n", count);
}
}对一维数组的排序实例(从小到大排序):123456789101112131415161718192021222324#include<stdio.h>
#include<stdlib.h>
int
comp(
const
void
*a,
const
void
*b)
{
return
*(
int
*)a-*(
int
*)b;
}
int
main()
{
int
*array;
int
n;
scanf
(
"%d"
,&n);
array=(
int
*)
malloc
(n*
sizeof
(
int
));
int
i=0;
for
(;i<n;i++)
{
scanf
(
"%d"
,(array+i));
}
qsort
(array,n,
sizeof
(
int
),comp);
for
(i=0;i<n;i++)
{
printf
(
"%d\t"
,array[i]);
}
return0;
}
对一个二维数组进行排序:int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。//即第一行和第二行(a[0]和a[1]分别代表第一行和第二行的首地址)。使用库函数排序的代码量并不比用冒泡排序法小,但速度却快很多。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869qsort
(a,1000,
sizeof
(
int
)*2,comp);
int
comp(
const
void
*a,
const
void
*b)
{
return
((
int
*)a)[0]-((
int
*)b)[0];
}
对字符串进行排序
int
Comp(
const
void
*p1,
const
void
*p2)
{
return
strcmp
((
char
*)p2,(
char
*)p1);
}
int
main()
{
char
a[MAX1][MAX2];
initial(a);
qsort
(a,lenth,
sizeof
(a[0]),Comp);
//lenth为数组a的长度
按结构体中某个关键字排序(对结构体一级排序):
structNode
{
double
data;
int
other;
}s[100];
int
Comp(constvoid*p1,constvoid*p2)
{
return
(*(Node*)p2)->data>(*(Node*)p1)->data?1:-1;
}
qsort
(s,100,
sizeof
(s[0]),Comp);
按结构体中多个关键字排序(对结构体多级排序)[以二级为例]:
struct
Node
{
int
x;
int
y;
}s[100];
//按照x从小到大排序,当x相等时按y从大到小排序
int
Comp(
const
void
*p1,
const
void
*p2)
{
struct
Node*c=(Node*)p1;
struct
Node*d=(Node*)p2;
if
(c->x!=d->x)returnc->x-d->x;
else
return
d->y-c->y;
}
对结构体中字符串进行排序:
struct
Node
{
int
data;
char
str[100];
}s[100];
//按照结构体中字符串str的字典序排序
int
Comp(
const
void
*p1,
const
void
*p2)
{
return
strcmp
((*(Node*)p1).str,(*(Node*)p2).str);
}
qsort
(s,100,
sizeof
(s[0]),Comp);
计算几何中求凸包的Comp
int
Comp(
const
void
*p1,
const
void
*p2)
//重点Comp函数,把除了1点外的所有的点旋转角度排序
{
struct
point*c=(point*)p1;
struct
point*d=(point*)p2;
if
(cacl(*c,*d,p[1])<0) return1;
elseif(!cacl(*c,*d,p[1])&&dis(c->x,c->y,p[1].x,p[1].y)<dis(d->x,d->y,p[1].x,p[1].y))
//如果在一条直线上,则把远的放在前面
return1;
elsereturn-1;
}
0 0
- 【无限背包】背包问题
- 背包问题---01背包
- 背包问题--部分背包
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 文件函数之fscanf和fprintf
- WIN7系统批处理修改IP地址
- 和菜鸟一起学linux之wifi学习记录
- 【Sublime Text 3】Sublime Text 3 - 3103 最新注册码
- ant 打包android项目
- 背包问题
- android网络编程学习笔记(一)
- HibernateTemplate空指针的问题
- Google严苛模式【调试、优化、检查】让你的APP更优,突破优化瓶颈
- 使用ehcache高并发场景下速度慢问题
- 用css解决table文字溢出控制td显示字数
- SBSettings Toggle Spec
- coredump来调试崩溃进程
- if(a);if(!a);if(a!=0);if(a==0)有什么区别?