zoukankan      html  css  js  c++  java
  • 题目:分配时间

    题目描述

    小王参加的考试是几门科目的试卷放在一起考,一共给t分钟来做。他现在已经知道每门科目花的时间和得到的分数的关系,还有写名字要的时间(他写自己的名字很慢)请帮他算一下他最高能得几分。总分一定时,第一门科目成绩尽量高,第一门科目成绩也一样时,第二门科目成绩尽量高…………以次类推。如果放弃某一门的考试(花的时间为0),那么名字也就不用写了。

    样例说明
    第一门:0分钟;第二门:3分钟,写名字1分钟,做题目2分钟,得3分;第三门:2分钟,写名字1分钟,做题目1分钟,得3分。总共得6分。


    数据范围
    对于50 %的数据,n<=4,对于100 %的数据,n<=10,t<=100, 所有数据都在longint范围内。

    输入格式

    第一行三个正整数t,n,name。 t是总时间,n表示考n个科目,name表示写名字要的时间(每一门科目写名字时间一样)。接下来 n行,每行t个正整数,第i个数表示时间为i时这门科目的分数(不一定递增)。时间为0时这门科目的分数为0,所以就不读入了。

    输出格式

    一个数,即总分。

    题解:

    动态规划问题,不过要注意当某学科考试不考时,名字是不必写的。f数组不可以再空间上优化。

    代码实现:

    #include<iostream>
    #include<cstring>
    using namespace std;
    
    int f[11][101],a[11][101],n,t,name;
    
    int main()
    {
        int i,j,k;
        cin>>t>>n>>name;
        
        memset(f,0,sizeof(f));
        
        for(i=1;i<=n;i++)
        for(j=1;j<=t;j++)
        cin>>a[i][j];  
                         
        for(i=1;i<=n;i++)
        for(j=t;j>=name;j--)
        for(k=j;k>=0;k--)
        if(j-name-k>=0&&k!=0&&f[i][j]<f[i-1][j-name-k]+a[i][k])
        f[i][j]=f[i-1][j-name-k]+a[i][k];  
        else if(j-name-k>=0&&k==0&&f[i][j]<f[i-1][j])
        f[i][j]=f[i-1][j];
        
        cout<<f[n][t]<<endl;
        return 0;
        
        }
                        
  • 相关阅读:
    如何在iTerm2中配置oh my zsh?
    sublime中格式化jsx文件
    ES6 new syntax of Literal
    ES6 new syntax of Rest and Spread Operators
    How to preview html file in our browser at sublime text?
    ES6 new syntax of Default Function Parameters
    ES6 new syntax of Arrow Function
    七牛云2018春招笔试题
    Spring-使用注解开发(十二)
    Spring-声明式事物(十一)
  • 原文地址:https://www.cnblogs.com/noip/p/2324186.html
Copyright © 2011-2022 走看看