CSU 1945: 最简单的题目
        【摘要】 
                    题目:
 Description
 小明有一台笔记本电脑,一台台式机电脑,两台电脑的性能相同,现在小明手里有N个等待运行的程序,每个程序运行所需的时间分别为n1,n2,n3,n4……,一台电脑同一时刻只能运行一个程序,一个程序只需要运行一次。两台电脑同时开始运行,请问小明该如何分配程序在这两台电脑上运行,使得最后结束运行的电脑的运行...
    
    
    
    题目:
Description
小明有一台笔记本电脑,一台台式机电脑,两台电脑的性能相同,现在小明手里有N个等待运行的程序,每个程序运行所需的时间分别为n1,n2,n3,n4……,一台电脑同一时刻只能运行一个程序,一个程序只需要运行一次。两台电脑同时开始运行,请问小明该如何分配程序在这两台电脑上运行,使得最后结束运行的电脑的运行时间最短。
Input
输入不超过30组数据,每组数据第一行为N,代表有N个等待运行的程序,第二行为N个数字,代表每个程序的运行时间,1 <= N <= 1000 ,每个程序的运行时间均为正整数, 所有程序的运行时间之和不超过5000。
思路:
首先是贪心,选出一些数,使得选出的数的总数最接近所有数的总数的一半即可。
其次是动态规划,其实就是0-1背包
代码:
  
   - 
    
     
    
    
     
      #include<iostream>
     
    
 
   - 
    
     
    
    
     
      #include<string.h>
     
    
 
   - 
    
     
    
    
     
      #include<algorithm>
     
    
 
   - 
    
     
    
    
     
      using namespace std;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      int value[1001], ans[5001];
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      int main()
     
    
 
   - 
    
     
    
    
     
      {
     
    
 
   - 
    
     
    
    
     	int N, V;
     
    
 
   - 
    
     
    
    
     	while (cin >> N)
     
    
 
   - 
    
     
    
    
     
      	{
     
    
 
   - 
    
     
    
    
     
      		V = 0;
     
    
 
   - 
    
     
    
    
     		memset(ans, 0, sizeof(ans));
     
    
 
   - 
    
     
    
    
     		for (int i = 1; i <= N; i++)
     
    
 
   - 
    
     
    
    
     
      		{
     
    
 
   - 
    
     
    
    
     
      			cin >> value[i];
     
    
 
   - 
    
     
    
    
     
      			V+= value[i];
     
    
 
   - 
    
     
    
    
     
      		}
     
    
 
   - 
    
     
    
    
     		for (int i = 1; i <= N; i++)for (int j = V/2; j >= value[i]; j--)
     
    
 
   - 
    
     
    
    
     
      			ans[j] = max(ans[j], ans[j - value[i]] + value[i]);
     
    
 
   - 
    
     
    
    
     
      		cout << V - ans[V / 2] << endl;
     
    
 
   - 
    
     
    
    
     
      	}
     
    
 
   - 
    
     
    
    
     	return 0;
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
 
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/79894585
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)