首页 > 其他分享 >ZCMU-1111

ZCMU-1111

时间:2024-04-29 19:33:51浏览次数:14  
标签:函数 int scanf ZCMU 1111 infinite void dp

image
image

与背包和动态规划有关(我认为)


  1. 采用dp数组存放吃掉i千克食物要用掉的钱
  2. dp最开始要尽量的大方便过程中判断和最后的输出判断
  3. 实时更新dp,保留最小的钱

以前不知道的

  • printf函数可以这样用
  • fill函数填充数组,(开始,结束,填充值);
  • C和C++结构体里面可以放函数
    学习

#include<cstdio>
#include<algorithm>
//包含 fill 函数 
using namespace std;
const int infinite=999999;
struct food{
    int a,b,c;
    //可以在结构体中加函数
	//无论C++或者C 
    void inputA(){
        scanf("%d",&a);
    }
    void inputB(){
        scanf("%d",&b);
    }
    void inputC(){
        scanf("%d",&c);
    }
};

int main(){
    int n,m;
    food f[1005];
    int i,j,k,dp[10005];
    //dp表示吃掉ikg花费的最小金额 
    while(~scanf("%d%d",&n,&m)){
    	
        for(i=0;i<n;i++)f[i].inputA();
        for(i=0;i<n;i++)f[i].inputB();
        for(i=0;i<n;i++)f[i].inputC();
        fill(dp,dp+1+m,infinite);
        
        *dp=0;//dp[0]表示吃掉0千克花费金额
		 
        for(i=0;i<n;i++){
        	//开始处理数据 
            for(j=m;j>=0;j--){
            	
            //只能从后到前,不能反过来
            //dp[j]因为大的是从小的过来
			//如果从0开始,这会重复加许多 
			
                if(dp[j]==infinite)continue;
                for(k=1;k<=f[i].c;k++){
                	//一分一分的加上来 
                    if(j+k*f[i].a>=m){
                        //大于m就直接上在dp[m]上,
						//因为可以超过他要吃的 
                        dp[m]=min(dp[m],dp[j]+k*f[i].b);
                        break;
                        //因为当前已经超过了 
                    }
                    dp[j+k*f[i].a]=min(dp[j+k*f[i].a],dp[j]+k*f[i].b);
                     
                }
            }
        }
        printf(dp[m]==infinite?"Impossible\n":"%d\n",dp[m]);
    }
    return 0;
}

标签:函数,int,scanf,ZCMU,1111,infinite,void,dp
From: https://www.cnblogs.com/hai-zei/p/18166539

相关文章

  • ZCMU-1129
    数学公式题罢了学长1.斯特灵公式:2.对数公式(因为以10为底,得到的是10^x,所以最后向下取整加上1);#include<cstdio>#include<cmath>usingnamespacestd;constdoublePI=acos(-1);constdoublee=exp(double(1));intstr(intn){returnfloor(log10(sqrt(2*PI*n))+......
  • ZCMU-1110
    思路:-首先可以知道最少动就是从三个角对称的划分因为不是对称划分则会出现破坏了正三角,后面还要重新对好之后就可以进行推导(按三角形我没看懂)其中设底上截出来的三角形的底为i,则上面就是n-2*i-1;所以动的数就可以算出来:[6*i^2+(4-4n)i+(n*n-n)]/2;最小就是i=(......
  • ZCMU-1101
    这个题不怎么难,就是当时没有理解到字典序的意思:我一直以为是自己元素间的比较,后再同学帮助下明白这里是与其他比,这样就很简单了。就是要求当前那个最小就可以了。对这道题我有点吐槽明明自己都说了最后一组数据没有空行,但是最后AC后的代码还是有换行的!#include<string.h>......
  • 1111
    什么是闭包,它的作用?闭包是在函数返回后保持对函数中变量的访问的一种方式。闭包通常用于数据隐私、封装和创建具有持久状态的函数。【TypeScript】1、解释事件委托 事件委托是一种技术,您无需将事件侦听器附加到各个元素,而是将单个事件侦听器附加到将为其子元素处理事件的父元素。......
  • ZCMU-1053
    比较简单记录一下主要感觉它这个题目没说清楚,题目要求:先有n,接着给出长度为n的标准组,然后给出猜测组,输出的两个数一个是有多少个是相对应的既相同坐标其数值也相同,后一个是两个都有但是位置不同(不含已经相同的)我觉得它少了一类个例子:类似于123436133343思路:用......
  • ZCMU-1051
    比较来说不太难其实,当然找到一定的公式这与前面的1033相识,都会用到f(i,j)=f(i-1,j)+f(i-1,j-1)我们可以先从小部分看出来,一层可以整体或者两部分,在面对第i层看前面i-1层中分成j-1分和j分,但是又因为自己可以分成分开与不分开所以要用到三维数组,分别放置不分开与分开我觉得......
  • ZCMU-1033
    我觉得这位大佬说的已经很好了,可以直接看她的思路了;大佬思路但是她的代码没有考虑到1111的情况,代码思路这个是可以的很长且没有注释;#include<bits/stdc++.h>usingnamespacestd;longlongd[40][40];longlongc[40][40];longlonga[40];longlongx,y;intk,b;......
  • 111111111111
    Python循环顾名思义就是重复执行某一操作,Python中循环包括while循环和for循环,while循环是通过条件判断来指定循环的范围,for循环采用遍历的形式指定循环范围。 print("3213213213")   1deftest:2a=13test n=0whilen<5:print("你好")n+=1......
  • ZCMU操作系统课程实验 - 实验1-Linux的使用
    登录1.打开这个东西2. 在  文件->打开    中打卡机房里VMOS文件里的这个东东 3.然后依次操作下去好了,有红色的选项,我都是选的"Donothing"。完成后就会出现这样一个黑框框。4.让你登录。输入:root。密码:superuser    。注意输入密码的时候,密......
  • XBTF011110 施耐德触摸屏
    施耐德电气生产的XBTF011110是一款人机界面(HMI)设备,即触摸屏。其主要特点包括:小巧精致:相比于同类产品,XBTF011110的体积更小,设计更为精巧。创新特性:在设计和制造过程中融入了许多创新元素,显著提升了其在功能和性能上的表现。优质可靠:施耐德电气作为知名的电气设备供应商,其产品一......