关闭

SDAU 练习三 1019 学院设备平分问题

标签: 动态规划背包问题
301人阅读 评论(0) 收藏 举报
分类:

Problem S

Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 116   Accepted Submission(s) : 46
Problem Description
Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer College had ever been split into Computer College and Software College in 2002.<br>The splitting is absolutely a big event in HDU! At the same time, it is a trouble thing too. All facilities must go halves. First, all facilities are assessed, and two facilities are thought to be same if they have the same value. It is assumed that there is N (0&lt;N&lt;1000) kinds of facilities (different value, different kinds).<br>
 

Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 50 -- the total number of different facilities). The next N lines contain an integer V (0<V<=50 --value of facility) and an integer M (0<M<=100 --corresponding number of the facilities) each. You can assume that all V are different.<br>A test case starting with a negative integer terminates input and this test case is not to be processed.<br>
 

Output
For each case, print one line containing two integers A and B which denote the value of Computer College and Software College will get respectively. A and B should be as equal as possible. At the same time, you should guarantee that A is not less than B.<br>
 

Sample Input
2 10 1 20 1 3 10 1 20 2 30 1 -1
 

Sample Output
20 10 40 40

简单题意:

       如今,我们都知道,计算机学院二是最大的部门。但是,也许你不知道曾经分成计算机学院计算机学院和软件学院在2002年。< br >二分裂绝对是一个大事件!与此同时,这是一件麻烦的事。所有设备必须平分。首先,所有设施评估,和两个设施被认为是相同的,如果他们有相同的值。假设有N(0 & lt;N<1000)类型的设施。

 

简单思路:

    这个是以前做的,思路有点遗忘,总的来说用一个数储存下来总价值,用一个累加数组记录n的值,再加上状态转移方程“dp[j]=max(dp[j],dp[j-a[i]]+a[i]);”就ok了。。

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int t,n,m,i,j,k,sum;
    int dp[100001];
    int a[100001];
    while(cin>>t&&t>=0)
    {
        memset(dp,0,sizeof(dp));
        sum=0;
        k=0;
        for(i=0;i<t;i++)
        {
            cin>>n>>m;
            sum+=n*m;
            for(j=0;j<m;j++)
            {
                a[k++]=n;
            }
        }
        for(i=0;i<k;i++)
        {
            for(j=sum/2;j>=a[i];j--)
            {
                dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
            }
        }
        cout<<sum-dp[sum/2]<<" "<<dp[sum/2]<<endl;
    }
    return 0;
}





0
0
查看评论

SDAU练习三1019

题目大意: 计算机学院分家。现在有价值为  vol 的电脑  n  台,求尽可能平分可以得到的价值。如果平分的价值不相等,先输出大的那一个。 这个题比较坑的就是,不是输入-1 结束,而是输入负数结束.......   思路: 转化成独立...
  • qq_34276853
  • qq_34276853
  • 2016-05-25 23:29
  • 113

SDAU课程练习2 1019

N皇后问题 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 4   A...
  • qq_33402621
  • qq_33402621
  • 2016-04-02 17:05
  • 210

SDAU 课程练习3 1019

Problem S Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 19  &...
  • qq_33402621
  • qq_33402621
  • 2016-04-30 11:46
  • 137

SDAU练习三1003

题目大意: 最长单调递增子序列和。 思路: 经典的dps. 感想: 豆豆说大白书上有,,他真厉害。。 #include    #include   #include   #incl...
  • qq_34276853
  • qq_34276853
  • 2016-05-04 22:54
  • 106

SDAU练习三1001

题目大意: 求最长公共子序列长度。 最长公共子序列的定义是   如abcde和dbada的最长公共字串为bd 或者 ad。 思路: 动态规划的问题 当前字符串能匹配到的长度。 ac代码: #include  &#...
  • qq_34276853
  • qq_34276853
  • 2016-05-04 12:53
  • 118

SDAU练习三1005

题目大意: 给出矩形的长宽高,每个矩形可用次数不限,如果一个矩形的长宽都严格小于另一个矩形的长宽(相等不算),那么,这个矩形就可以叠在另一个矩形上,问可以达到的最大高度 思路: 每个矩形的状态只有三种 GTA 模型对于每个矩形,拆分成三个,然后求长宽都递减的子序列。 ...
  • qq_34276853
  • qq_34276853
  • 2016-05-06 11:15
  • 94

SDAU练习三 1014

题目大意:直线分割平面的问题每个折现都要和前面的  n-1  个折线有尽可能多的交点才可以获得更多的平面,所以可以用递推公式解决  fn = f(n -1)+4* (n-1) +1    当然,fn 表示的是直线的个数为n 时,平面的数量...
  • qq_34276853
  • qq_34276853
  • 2016-05-21 18:41
  • 94

SDAU练习三 10001

题目大意: 求出最大连续子序列的和,并且给出起始位置和终止位置 思路:感觉这个题利用动态规划的思路确实是可以节省运算时间,,就是代码多了好多,大概明白以时间换空间什么意思啦~ AC代码: [cpp] view plain c...
  • qq_34276853
  • qq_34276853
  • 2016-05-03 23:01
  • 108

SDAU练习三总结

动态规划程序设计是对解最优化问题的一种途径,是解决多阶段决策问题的一种方法。在每一个阶段都需作出决策,并影响到下一个阶段的决策。多阶段决策问题,就是要在可以选择的那些策略中间,选取一个最优策略,使在预定的标准下达到最好的效果动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解...
  • qq_34276853
  • qq_34276853
  • 2016-06-01 12:53
  • 152

SDAU练习三1018

题目大意: 有一个小猪存钱罐。空的存钱罐有一个质量,装满后有一个质量,首先给出存钱罐的两个质量 然后给出钱币的价值和质量。求在质量满足的情况下,可以得到的最小价值。 思路: 这是一个完全背包问题,只需要把循环的方式改过来就行了。  只要还有体积,那就往背包里面装入物品,这个...
  • qq_34276853
  • qq_34276853
  • 2016-05-24 20:52
  • 104
    个人资料
    • 访问:128090次
    • 积分:2273
    • 等级:
    • 排名:第19489名
    • 原创:98篇
    • 转载:19篇
    • 译文:0篇
    • 评论:73条
    最新评论