zoukankan      html  css  js  c++  java
  • 西北工业大学2008算法机试 复习计划

    <span style="color:#000099;">/*
    1253.复习计划
    时限:1000ms 内存限制:10000K  总时限:3000ms
    描述
    lily同学一直很努力,可是每年的综合测评都不高。
    他思来想去,有一天突然明白了,原来每人都有自己擅长的学科,
    而lily总是把大量的时间用于那些学分低,并且自己不擅长的科目。
    快要考试了,如何在仅有的D天内复习N门功课,每科需要d天复习,预计能考g分。
    而每门课程的学分为m,现在请算出lily可能得到的最高学分积
    (注:1、学分积 = 各科成绩*学分 的累加和;
          2、要是时间不够,可以放弃一些)
     
    输入
    多测例
    第一行两个整数:N(N<=10)和 D,后面有N行整数,每行为d g m 
    N等于零标志输入结束。
    
     
    输出
    每个测例的输出占一行,输出一个整数,即可能得到的最高学分积。
    
     
    输入样例
    1 2
    1 100 2
    3 5
    2 89 2
    2 60 4
    5 59 2
    3 5
    2 89 2
    2 60 4
    3 59 4
    0 0
    
     
    输出样例
    200
    418
    476
    
     
    提示
     
    来源
    By yuan.c
    2014/6/22
     
    */
    #include<stdio.h>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int N;
    int D;
    int n[10];
    int d[10];
    int g[10];
    int m[10];
    int grad=0;
    int a[10][100];
    int max(int a,int b)
    {
        if(a>=b)
          return a;
          else
          return b;
    }
    
    void sort()
    {
        int i,j,t;
        for(int i=1;i<N;i++)
           for(int j=1;j<=N;j++)
             if(d[i]<d[j]){
                 t=d[i],d[i]=d[j],d[j]=t;
                 t=g[i],g[i]=g[j],g[j]=t;
                 t=m[i],m[i]=m[j],m[j]=t;
             }
    }
    void solve()
    { 
    
        int i,j;
        for(i=0;i<=N;i++)
         a[i][0]=0;
       for(j=0;j<=D;j++)
          a[0][j]=0;
          for(int i=1;i<=N;i++)
             for(int j=1;j<=D;j++){
                  if(j<d[i])
                     a[i][j]=a[i-1][j];
                   else
                     a[i][j]=max(a[i-1][j],a[i-1][j-d[i]]+m[i]*g[i]);  }
            cout<<a[N][D]<<endl;
          
    
    }
    int main()
    {
        while(scanf("%d %d",&N,&D)){
            if(N==0)
               break;
    
           for(int i=1;i<=N;i++)
             scanf("%d %d %d",&d[i],&g[i],&m[i]);
             sort();
              if(D==0)
               cout<<0<<endl;
               else
            solve();
            memset(d,0,10);
            memset(m,0,10);
            memset(g,0,10);
            memset(a,0,1000);}
            return 0;
    }
    </span>


  • 相关阅读:
    《SPFA算法的优化及应用》——姜碧野(学习笔记)
    hdu 4691 Front compression
    hdu 4690 EBCDIC
    UVA 11478 Halum(用bellman-ford解差分约束)
    UVA 11090 Going in Cycle!!(二分答案+判负环)
    UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)
    hdu 4674 Trip Advisor(缩点+倍增lca)
    canny算子原理
    二值图像连通区域标记
    C++全局变量的声明和定义
  • 原文地址:https://www.cnblogs.com/codeyuan/p/4254549.html
Copyright © 2011-2022 走看看