zoukankan      html  css  js  c++  java
  • 【t040】SETI任务

    Time Limit: 1 second
    Memory Limit: 128 MB

    【问题描述】

    Sqybi的电脑在做一个任务,就是SETI@home,据说这个任务在全世界有500 多万台电脑在同时做,可以说是最热门的。它的目的
    就是通过分析射电望远镜收到的无线电信号查找外太空智慧生物。这个任务算是起步比较早的,它也会为我们分配很多的任务。
    这样,我们的机器有的时候就不能在给定的期限内完成所有的任务。现在sqybi 就遇到了这个问题,由于他的电脑是笔记本,他
    不能用太多的时间运行所有的任务。他希望你能够提供一个程序,用来告诉他应该运行哪些任务以使他得到的积分最多。注意一
    下,一个单位时间内只能运行一个任务,而每个任务都有一个固定的积分。如果没有完成一项任务,那么在这项任务上不会得到
    任何的积分。 现在提供每个任务需要的单位时间和可以得到的积分以及sqybi 可以用来运行任务的总时间,需要输出sqybi 可以得到的最大积分。

    【输入格式】

    第1 行是一个正整数n 和一个正整数m,分别代表被分配的任务数和总共可以用来运行任务的时间,中间用一个空格分开。
    第2 行到第n+1 行每行两个数,用空格分开,分别是正整数t 和正实数p。t 表示该任务需要的时间,p表示该任务可以得到的积分数。
    【数据范围】 
    对于30%数据,n≤15。 
    对于100%数据,p 的小数位不会超过三位,p≤100,m≤10000,n≤1000。 

    【输出格式】

    仅一行,表示sqybi 可以得到的最大积分,保留三位小数。

    Sample Input

    4 10
    5 1
    1 5
    6 10
    4 6
    
    
    
    

    Sample Output

    16.000

    【题解】

    这就是一个0/1背包问题。然后因为价值是实数,所以用double类型的f数组来存最优值。更新的时候记得逆序更新就好。没有坑点。最后“%.3lf”输出。

    ps:不想强迫自己写模块化的代码了。从这篇后可能就是直接写下来了。

    【代码】

    #include <cstdio>
    
    int n,m,w[1010];
    double c[1010],f[10010];
    
    void input_data()
    {
    	scanf("%d%d",&n,&m);
    	for (int i = 1;i <= n;i++) //输入花费和获得的价值 
    		scanf("%d%lf",&w[i],&c[i]);
    }
    
    void get_ans()
    {
    	for (int i = 1;i <= n;i++)
    		for (int j = m;j >= w[i];j--) //因为是0/1背包所以逆序更新。这样不会影响到其他要更新的位置 
    			if (f[j] <f[j-w[i]] + c[i])
    				f[j] = f[j-w[i]] + c[i];
    }
    
    void output_ans()
    {
    	printf("%.3lf",f[m]); //保留3位小数输出。 
    }
    
    int main()
    {
    	//freopen("F:\rush.txt","r",stdin);
    	input_data();
    	get_ans();
    	output_ans();
    	return 0;
    }


    
       
    
    
  • 相关阅读:
    os.path.split()、os.path.realpath()和os.path.join()
    我终于也有了自己的博客网站
    (Bug修复)C#爬虫,让你不再觉得神秘
    DevExpress弹框、右键菜单、Grid的使用
    Linux 宝塔部署 ASP.NET Core 应用
    C#高级特性(反射)
    WPF 的内部世界(Binding)
    WPF 的内部世界(控件与布局)
    Layui事件监听(表单和数据表格)
    (待更新)tensorboard [Fatal error in launcher: Unable to create process using]
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632372.html
Copyright © 2011-2022 走看看