采药问题 c语言程序,采药 (C语言代码)
解题思路:这个题充分考察了算法的能力,实际上就是01背包的一个非常简单的变形,如果可以我建议先百度一下01背包,再来看这个问题就会容易的多了。
运用到的知识:
多维数组,递归(知道为什么不好做了吧( ̄▽ ̄)"
注意事项:一定要注意数组的范围!!!题主就是在这个非常平常的地方栽了跟头。。。哭4
参考代码:
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int T,M,t[101],c[101]; //t[101]储存每一个药的时间,c[101]储存每一个药价值
int f[102][1002]={0}; //务必初始化,其实呢也可以只用把二维数组的第一行初始化就ok了
int i,j,k;
scanf("%d %d",&T,&M);
for(i=1;i<=M;i++)
{
scanf("%d %d",&t[i],&c[i]);
}
for(i=1;i<=M;i++)
{
for(j=1;j<=T;j++)
{
if(j>=t[i])
f[i][j]=max(f[i-1][j],f[i-1][j-t[i]]+c[i]); //这就是01背包中的两个状态,采或者不采两种情况哪个的价值最大
else
f[i][j]=f[i-1][j]; //书包的空间(时间不够了)
}
}
for(i=0;i<=M;i++) //检查所有的值,找最大的值
{
k=f[0][0];
for(j=0;j<=T;j++)
{
if(f[i][j]>k)
k=f[i][j];
}
}
printf("%d",k);
}
//其实呢,除了多维数组,一维数组利用递归也是可以解决问题滴
//不过,悲惨的超时了。。。。
int t[100],c[100];
int main()
{
int T,M,k,i;
scanf("%d %d",&T,&M);
for(i=1;i<=M;i++)
{
scanf("%d %d",&t[i],&c[i]);
}
int make(int ,int );
k=make(M,T);
printf("%d",k);
return 0;
}
int make(int i,int j) //第 i个对象,剩余j个时间
{
if(i==0)
return 0;
if(j>=t[i])
{
int r1=make(i-1,j);
int r2=make(i-1,j-t[i])+c[i];
return r1>r2?r1:r2;
}
else return make(i-1,j);
}
采药问题 c语言程序,采药 (C语言代码)相关推荐
- c语言 程序循环,C语言程序设计-循环例子
<C语言程序设计-循环例子>由会员分享,可在线阅读,更多相关<C语言程序设计-循环例子(28页珍藏版)>请在人人文库网上搜索. 1.C 语言程序设计基础篇,第 7 章 简单程序 ...
- 简单说明c语言程序步骤,C语言的入门简介和三个简单的C语言程序详细说明
学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好.Keil软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器.宏汇编.连接器.库管理和一个功能强大的仿真调试器等在 ...
- c语言程序前言,C语言 程序代码编写规范前言
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...
- c语言程序基本设计,C语言程序的设计基本6.ppt
C语言程序的设计基本6 第六章 本章要点 建立循环程序设计的基本概念和逻辑思维 掌握循环程序设计的方法 6.1 if-goto 语句循环 一般形式: goto 标号: 标号:语句 其中:标号用标识符表 ...
- c语言 程序结集,c语言(结体程序设计).doc
c语言(结体程序设计) C语言程序设计实验报告 实验七.结构体程序设计 [实验目的] (1)掌握结构体类型的概念.定义和使用: (2)掌握结构体数组.结构体指针的定义和使用: [实验内容及步骤] 1. ...
- 情人节c语言程序,情人节c语言代码.doc
情人节c语言代码 篇一:一些简单的C语言程序代码 由键盘任意输入1个4位数整数,分别输出其中的个位.十位.百位.千位. /* expe 3-10 */ #include #include void m ...
- 好听的歌曲单片机c语言程序,单片机C语言程序举例(三)
原标题:单片机C语言程序举例(三) 14.音乐播放 //此程序在硬件上调试通过 //本程序的晶振采用11.0592M #include sbit speaker=P1^2; unsigned char ...
- c 语言程序编辑,C语言程序编辑学习篇—编程者说之C语言
谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是"让我欢喜让我忧."欢喜的是,C语言功能非常强大.应用广泛,一旦掌握了后,你就可以理直气壮地对他人说"我是电脑高手 ...
- 认识c语言程序,认识C语言
-一个完整的C语言程序是什么样的?
为了创建完整的 C语言程序需要在 C 源文件中输入代码.任何文本编辑器(比如 Windows 中的"记事本")都可以创建 C 源文件,它们的文件名通常以".c" ...
- adc0809 c语言程序,单片机C语言程序设计:ADC0809数模转换与显示
描述 本文分享ADC0809数模转换与显示的单片机C语言程序设计与电路图. ADC0809 数模转换与显示c语言程序 /*名称:ADC0809数模转换与显示 说明:ADC0809采样通道3输入的 模拟 ...
最新文章
- exp ORA-01455: converting column overflows integer datatype
- Spring Boot 内置Tomcat——getServletContext().getRealPath()为临时目录问题解决方案
- Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
- Spring Bean名称
- 彩票抽奖(洛谷P2550题题解,Java语言描述)
- Maven安装配置操作
- 2017.9.23 Count on a tree 思考记录
- 【渝粤教育】国家开放大学2018年秋季 0056-22T知识产权法 参考试题
- Java开发 基础三十条 初学必看
- how to set up github blog
- 极客星球 | Unity3D插件模板化探索
- DR,TUN,NAT优缺点
- 搭建无iDP证书的Xcode环境
- java+vue+onlyoffice的简单集成
- 哔哩哔哩面试经验分享
- 计算机在智能建筑中的应用,【计算机技术在建筑智能化中的应用研究原稿_0材料】...
- UVa Problem 10041 Vito’s Family (Vito 家族)
- pads 打开AD 软件的pcb——两种方式
- NKOJ 1361 帮帮吉米(Help Jimmy)
- U盘插上,在我的电脑中不显示盘符怎么办?