蓝桥杯打卡第九天(2.8)

0ms 2023-02-08 18:43:51

1.二分法

代码:

//力扣提交形式 
int search(int* nums, int numsSize, int target){//1 2 9 10 11 66 88 99 100//99
	int left = 0, right =numsSize-1, mid;
	while (left <= right) {//0 9 //1 9
		mid = (left + right) / 2;//4 
		if (nums[mid] == target) return mid;
		else if (nums[mid] < target)  left = mid + 1;
		else right = mid - 1;

	}
	return -1;
}

解析:二分法就是以中间值为基准,缩小查找范围,前提条件是排好序的数据,效率更高! 

2.题目描述(小明的背包3)

小明有一个容量为 V 的背包。

这天他去商场购物,商场一共有 N 种物品,第 ii 种物品的体积为 w_iwi​,价值为 v_ivi​,数量为 s_isi​。

小明想知道在购买的物品总体积不超过 V 的情况下所能获得的最大价值为多少,请你帮他算算。

输入描述

输入第 1 行包含两个正整数 N,V,,表示商场物品的数量和小明的背包容量。

第 2\sim N+12∼N+1 行包含 33 个正整数 w,v,sw,v,s,表示物品的体积和价值。

1\leq N\leq10^21≤N≤102,1\leq V \leq 2\times10^21≤V≤2×102,1 \leq w_i,v_i,s_i \leq 2\times10^21≤wi​,vi​,si​≤2×102。

输出描述

输出一行整数表示小明所能获得的最大价值。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int dp[101][101] = {0};
int main() {
	int n, V;
	cin >> n >> V;
	int w[200] = {0}, v[200] = {0}, s[200] = {0};
	for (int i = 1; i <= n; i++)
		cin >> w[i] >> v[i] >> s[i];
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= V; j++) {
			for (int k = 0; k <= s[i] && k * w[i] <= j; k++) {
				dp[i][j] = max(dp[i][j], dp[i - 1][j - k * w[i]] + k * v[i]);
			}
		}

	}
	cout << dp[n][V];
}

解析:最背包问题的基础上增加了变量s,也就是数量!!!

3.题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

给定数列 1, 1, 1, 3, 5, 9, 17,⋯,从第 4项开始,每项都是前 3 项的和。

求第 20190324 项的最后 4 位数字。

#include<stdio.h>
int main() {
	int f1=1,f2=1,f3=1,f4;
	int i;
	for (i = 4; i <=20190324; i++) {
		f4=(f1+f2+f3)%10000;//求后四位 
		f1=f2;
		f2=f3;
		f3=f4;
		}
		printf("%d",f4);//20190324项正好满足就是对f4; 
		return 0;
	}

总结:播下一种心态,收获一种理想!

...全文
9 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,229

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧