洛谷p2240部分部分背包问题c语言(数组实现)
部分背包问题网上都是c++实现,而且使用结构体,这里给小白提供一种c语言方法,并且不需要结构体,只需要数组便可以
#include <stdio.h>
int main()
{
double a[100][2] = { 0 };
int n = 0;
double pp = 0, qq = 0, ss = 0;
double t = 0;
double ave[100] = { 0 };
scanf("%d %lf", &n, &t);//输入金币箱数和背包能够承受的总重量
for (int i = 0; i < n; i++)
{
scanf("%lf %lf", &a[i][0], &a[i][1]);//输入每箱金币的重量和价值
ave[i] = a[i][1] / a[i][0];//计算每箱金币的(重量/价值)
}
for (int i = 0; i < n - 1; i++)
{
for (int j = n-2; j >=i; j--)
{
if (ave[j]<ave[j+1])
{
pp = a[j][0];
a[j][0] = a[j+1][0];
a[j+1][0] = pp;
qq = a[j][1];
a[j][1] = a[j+1][1];
a[j+1][1] = qq;
ss = ave[j];
ave[j] = ave[j + 1];
ave[j + 1] = ss;
}
}
}
double sum = 0;
double value = 0;
int i = 0;
for (i = 0; sum < t && i < n; i++)//按照性价比从高到低装金币
{
sum += a[i][0];
value += a[i][1];
}
if (i != n)
{
sum -= a[i - 1][0];//减去多加的
value -= a[i - 1][1];
value += (t - sum) * a[i - 1][1] / a[i - 1][0];//补齐剩余部分
printf("%.2f", value);
}
else
{
sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i][1];
}
printf("%.2f", sum);
}
return 0;
}
洛谷p2240部分部分背包问题c语言(数组实现)相关推荐
- 洛谷P2240木材加工
题目链接 洛谷P2240 题目描述 木材厂有 n根原木,现在想把这些木头切割成 k 段长度为l的小段木头(木头有可能有剩余). 当然,我们希望得到的小段木头越长越好,请求出 l的最大值. 木头长度的单 ...
- 修改数组(洛谷P7285题题解,C++语言描述)
题目要求 P7285题目链接 分析 这题虽然是红题,但是因为很有趣且是 Special Judge ,所以写篇题解. 乍一看,这题好麻烦啊,要综合考虑xxx和yyy,达到x−yx-yx−y的最优化. ...
- 麦森数(洛谷P1045题题解,Java语言描述)
题目要求 题目链接 分析 这题挺经典的,快速幂取模算法,如果求出大数再取模就可能T掉. 之前有篇文章写了这个算法:<快速幂算法详解&&快速幂取模算法详解> 既然是Java, ...
- 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)
题目要求 P1101题目链接 分析 可以用DFS做,但我立下了个Flag,所以就用了朴素的枚举来做.... 结果,我的天哪,做了好几个小时-- 其实这种地图题,真的适合 DFS or BFS or D ...
- 线性存储的最短平均检索时间(洛谷P1253题题解,Java语言描述)
题目要求 P1253题目链接 分析 很像 ~洛谷P1223题题解~,也是一种类似SJF的贪心法. 排个序,由于两个不大于10000的数,乘起来还是int,就使用int属性吧. 数据量小,所以Scann ...
- 快速幂||取余运算【模板】(洛谷P1226题题解,Java语言描述)
题目要求 P1226题目链接 分析 标准的快速幂取模算法板子,之前这个算法我在这篇文章中讲过了:<快速幂算法详解&&快速幂取模算法详解>. 这里选择使用比较简单的API实现 ...
- 队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)
题目要求 P1996题目链接 分析 以前就研究过"约瑟夫环"问题: <单循环链表求解约瑟夫环问题(Java语言描述)> <杀人游戏~约瑟夫环(洛谷P1145题题解 ...
- 求子集元素之和(洛谷P2415题题解,Java语言描述)
题目要求 P2415题目链接 分析 这题我觉得--当个数学题做就好了嘛. 有一个数N的情况:result = 1 * N 有两个数N1.N2的情况:result = 2 * (N1+N2) 有三个数N ...
- 用0和5凑被90整除的max数(洛谷P2192题题解,Java语言描述)
题目要求 P2192题目链接 分析 盘一盘各种情况吧: 要被90整除,就必须被10整除,所以必须有0,没0就是-1啊. 要被90整除,一堆5,靠0是没用的,只能是9个5凑一堆儿才有用,有0但凑不够9个 ...
最新文章
- sqrt()函数的详解和用法
- Windows 10安装CUDA10.1+cudnn7.6.0+Pytorch1.3.0
- 给用户权限数据添加缓存
- 第八章应用安全工程备考要点及真题分布
- 三维球体换算到二维_三维制图讲义04 - 基础几何体
- [转载] python计时函数timeit.timeit()使用小结
- selenium启动chrome时Proxy server需要验证用户
- c 怎么更改计算机的默认打印机,C#Winfrom系统打印机调用/设置默认打印机
- 微信怎么自动加好友java_Xposed-微信自动加好友功能实现
- DWORD winapi java_DWORD WINAPI?stdcall?
- 坚果pro3刷miui_锤子科技坚果Pro 3(12GB/256GB/全网通)手机卡怎么办?
- 安利的短片 安利的真面目 zt
- 苹果微信点开才会收到信息_最新!苹果突然承认:iPhone12是问题产品
- 1.自学软件测试之虚拟机安装
- 论文浅尝 | 利用常识知识图谱进行多跳推理的语言生成方法
- Ulua调用C#枚举
- Hadoop集群扩容新增4T硬盘(解决分区大小问题限制2T问题)
- IPV6地址-格式和讲解
- Git 针对 GitLab Github 配置 HTTP HTTPS SSH 代理
- (数学)P、NP、NPC、NP hard问题