3481:练86.2 采药问题

3481:练86.2 采药问题

信息学奥赛一本通-编程启蒙(C++版)在线评测系统

练86.2 采药问题

1932:【05NOIP普及组】采药

信息学奥赛一本通(C++版)在线评测系统

1290:采药

信息学奥赛一本通(C++版)在线评测系统

采药(信息学奥赛一本通-T1290)

采药(信息学奥赛一本通-T1290)_哔哩哔哩_bilibili

信息学奥赛 1290-采药

信息学奥赛 1290-采药_哔哩哔哩_bilibili

【算法竞赛|好题精讲】1.采药 | 动态规划、背包 | NOIP 2005普及组

【算法竞赛|好题精讲】1.采药 | 动态规划、背包 | NOIP 2005普及组_哔哩哔哩_bilibili




#include <bits/stdc++.h>
using namespace std;
int w[3000],c[3000],f[3000][3000],m,t;
int main()
{
	cin>>t>>m;
	for(int i=1;i<=m;i++) cin>>w[i]>>c[i];
	for(int i=1;i<=m;i++){
		for(int j=t;j>0;j--){
			if(w[i]<=j) f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+c[i]);
			else f[i][j]=f[i-1][j];
		}
	}
	cout<<f[m][t];
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int M = 1001;
int val[M], time_cost[M]; //存储给定草药的价值和花费时间
int f[M][M]; //第一维坐标表示对于第i个草药的取舍,第二维坐标表示所花费时间
//经典01背包,然而我只会用二维矩阵,令人感叹

int main (){
    int t1me, m;
    while (~ scanf ("%d %d", &t1me, &m)){
        for (int i = 1; i <= m; ++ i) scanf ("%d %d", &time_cost[i], &val[i]);
        for (int i = 1; i <= m; ++ i){
            for (int j = 1; j <= t1me; ++ j){
                f[i][j] = f[i - 1][j]; //首先默认舍去第i个草药
                if (j >= time_cost[i]){ // 如果当前时间不够采集第i个草药则跳过
                    f[i][j] = max(f[i][j], f[i - 1][j - time_cost[i]] + val[i]);
                    //在时间为j,考虑前i个草药的条件下,最大的值为f[i][j]
                }
            }
        }
    cout << f[m][t1me] << endl;
    }
    return 0;
}


#include<cstdio>
#include <bits/stdc++.h>
using namespace std;
const int maxm = 2001, maxn = 3001;
int m, n;
int w[maxn], c[maxn];
int f[maxn][maxm]; 

//求x和y最大值
int max(int x,int y)  { return x>y?x:y;}    

int main( void )
{
	//freopen("a.in","r",stdin);
	//freopen("b.out","w",stdout);栈 
    //背包容量m和物品数量n
	scanf("%d%d",&m, &n);         
    
    //在初始化循环变量部分,定义一个变量并初始化
	for (int i = 1; i <= n; i++)         
    	//每个物品的重量和价值  
		scanf("%d%d",&w[i],&c[i]);    
    
    memset(f,0,sizeof(f));//快 
    
	// f[i][v]表示前i件物品,总重量不超过v的最优价值
	for (int i = 1; i <= n; i++) 
	{
		for (int v =0; v <=m ; v++)
	    {
	    	if ( w[i] <= v )  
			{
				f[i][v] = max(f[i-1][v],f[i-1][v-w[i]]+c[i]);
				//cout<<"01 f["<<i<<"]["<<v<<"]="<<f[i][v]<<" f["<<i-1<<"]["<<v<<"]="<<f[i-1][v]<<" f["<<i-1<<"]["<<v-w[i]<<"]="<<f[i-1][v-w[i]]<<" c["<<i<<"]="<<c[i]<<endl;
			}
	        else  //w[i]>v肯定第i个物品放不到背包里 
			{
				f[i][v] = f[i-1][v];
				//cout<<"02 f["<<i<<"]["<<v<<"]="<<f[i][v]<<endl;
			}	 
		}
		//cout<<"------------------------------------"<<endl;
	}        
    
    
	// f[n][m]为最优解       
    printf("%d",f[n][m]); 
    
	//fclose(stdin);
	//fclose(stdout); 
	return 0;
}
/*
使用二维数组存储各子问题时方便,但当maxm较大时,
如maxm=2000时不能定义二维数组f,怎么办,
其实可以用一维数组。 
10 4   m,n
2  1   w[i]  c[i] 
3  3
4  5
7  9
*/



 




python算法

https://blog.csdn.net/dllglvzhenfeng/category_11688201.html

信息技术学考一本通(python)

https://blog.csdn.net/pcethonny/category_11943783.html

信息技术学考一本通(python)1036:【例4.1】输出连续10个数(浙版)

信息技术学考一本通(python)1036:【例4.1】输出连续10个数(浙版)_信息技术学考python一本通-CSDN博客

信息技术学考一本通(python)-1062:练4.13 水仙花数

信息技术学考一本通(python)-1062:练4.13 水仙花数_1062:练4.13 水仙花数-CSDN博客

Python信息技术学考一本通题目讲解、python入门、python习题集整理汇总等

Python信息技术学考一本通题目讲解、python入门、python习题集整理汇总等_信息学奥赛一本通python网站-CSDN博客

 

### 回答1: 好的,以下是回复: 可以使用Python编程来计算每种图书购买的数量,然后计算应付的总费用。具体代码如下: # 定义每种图书的单价 price = {'计算概论': 28.9, '数据结构算法': 32.7, '数字逻辑': 45.6, 'c++程序设计教程': 78, '人工智能': 35, '计算机体系结构': 86.2, '编译原理': 27.8, '操作系统': 43, '计算机网络': 56, 'java程序设计': 65} # 定义每种图书购买的数量 quantity = {'计算概论': 2, '数据结构算法': 3, '数字逻辑': 1, 'c++程序设计教程': 4, '人工智能': 2, '计算机体系 ### 回答2: 在这个问题中,我们需要编写一个程序来基于每种书买的数量来计算应付的总费用。我们可以将每种书的单价和数量存储在一个二维矩阵中,然后通过对矩阵进行迭代和计算得出最终的总费用。 具体的计算步骤如下: 1. 定义一个二维数组来存储每种书的单价和数量。 2. 通过循环迭代数组中的每个元素,并计算每种书的总价。 3. 在每个迭代步骤中,将单价和数量相乘,然后累加到总价中。 4. 最后,输出计算出的总价。 下面是一个简单的 Python 程序,可以实现上述步骤: ```python # 定义每种书的单价 prices = { '计算概论': 28.9, '数据结构算法': 32.7, '数字逻辑': 45.6, 'c程序设计教程': 78, '人工智能': 35, '计算机体系结构': 86.2, '编译原理': 27.8, '操作系统': 43, '计算机网络': 56, 'java程序设计': 65, } # 定义每本书的数量 quantities = { '计算概论': 2, '数据结构算法': 1, '数字逻辑': 3, 'c程序设计教程': 2, '人工智能': 1, '计算机体系结构': 1, '编译原理': 3, '操作系统': 2, '计算机网络': 1, 'java程序设计': 4, } # 计算总价 total_cost = 0 for book, quantity in quantities.items(): total_cost += prices[book] * quantity # 输出结果 print('总费用为:{} 元'.format(total_cost)) ``` 这个程序可以计算出所有图书的总费用,并输出结果。 ### 回答3: 本题需要编写一个简单的程序来计算每种图书购买的数量所需要付出的总费用。这个程序需要输入每种图书的单价和购买数量,然后将它们相乘并累加起来,最后输出总费用。 在开始编写程序之前,我们需要理解一些基本的编程概念,如变量和算术运算符。变量是用来存储数据的容器,它们可以在程序中被引用和修改。算术运算符是用来执行基本算术运算的符号,如加号、减号、乘号和除号。 下面是一个示例程序,它演示了如何使用变量和算术运算符来计算图书的总费用: ```python # 定义每种图书的单价 price1 = 28.9 price2 = 32.7 price3 = 45.6 price4 = 78 price5 = 35 price6 = 86.2 price7 = 27.8 price8 = 43 price9 = 56 price10 = 65 # 读取每种图书的购买数量 num1 = int(input("请输入第1本图书的购买数量:")) num2 = int(input("请输入第2本图书的购买数量:")) num3 = int(input("请输入第3本图书的购买数量:")) num4 = int(input("请输入第4本图书的购买数量:")) num5 = int(input("请输入第5本图书的购买数量:")) num6 = int(input("请输入第6本图书的购买数量:")) num7 = int(input("请输入第7本图书的购买数量:")) num8 = int(input("请输入第8本图书的购买数量:")) num9 = int(input("请输入第9本图书的购买数量:")) num10 = int(input("请输入第10本图书的购买数量:")) # 计算总费用 total = price1 * num1 + price2 * num2 + price3 * num3 + price4 * num4 + price5 * num5 + price6 * num6 + price7 * num7 + price8 * num8 + price9 * num9 + price10 * num10 # 输出结果 print("总费用为:", total, "元") ``` 这个程序首先定义了每种图书的单价,并读取每种图书的购买数量。然后,它使用算术运算符将每种图书的总价相加起来,最后输出结果。 需要注意的是,在实际编写程序时,我们可以使用循环和列表来避免重复的代码。例如,我们可以使用一个列表来存储每种图书的单价和购买数量,然后使用循环来计算总费用。这样做可以使程序更加简洁和易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值