第七周总结

第七周总结


一、知识总结
1、区间DP
区间DP主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优
值。

//一般区间DP实现代码
  memset(dp,0x3f,sizeof(dp));
  for(int i=1;i<=n;i++)  //区间长度·为1的初始化
    dp[i][i]=0;
  for(int len=2;len<=n;len++)
  {  
    for(int i=1,j=len;j<=n;i++,j++)
         { //DP方程实现
        }
  }

2、ropen函数
函数存于头文件<<stdio.h>>中

int main()
{ foropen("文本名.txt","r",stdin);
  //其余代码
  return 0;
}

讲要输入的数据存在文本文档中,用foropen直接读取,适用于多组输入和大量输入。
注:"r"表示只读访问,"w"表示只写访问,"a"表示追加写入。
stdout标准输出
stdin标准输入
stderr标准错误
二、题目解决
1、

student_对象数组

描述

输入N 及N个学生的信息(学号,姓名 ,以及三门课程的成绩)。按照总分高低的顺序输出每个学生信息。(说明:输入数据保证每个学生总成绩各不相同),并统计每门课程及格人数及格率(60分及格)采用面向对象方法实现。数据成员访问权限必须是私有的。根据需要定义各成员函数。必须定义带参的构造函数。

输入

学生人数N 及 N 个 学生的信息

输出

降序方式输出学生信息

样例输入

3
20190001 赵一 60 70 50
20190002 钱二 90 80 70
20190003 孙三 80 90 90

样例输出

20190003 孙三 80 90 90 260
20190002 钱二 90 80 70 240
20190001 赵一 60 70 50 180
3 100.00%100
3 100.00%100
2 66.67%100

代码

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class student
{ private:
    string id,name;int i;
    double a1,a2,a3,sum;
  public:
    student(int i1)
    { id="20190000",name="张三";a1=100,a2=100,a3=100;
      sum=a1+a2+a3;i=i1;
    }
    void setdata()
    { cin >> id>>name>>a1>>a2>>a3;
      sum=a1+a2+a3;
    }
    friend bool cmp(student &s1,student &s2);
    void getdata()
    { cout<<id<<" "<<name<<" "<<a1<<" "<<a2<<" "<<a3<<" "<<sum<<endl;}
    double geta1(){ return a1;}
    double geta2(){ return a2;}
    double geta3(){ return a3;}
};
bool cmp(student &s1,student &s2)
{ return s1.sum>s2.sum;}
int main()
{
    int n,i,j1=0,j2=0,j3=0;
    double a11,a22,a33;
    string id1,name1;
    cin >> n;
    vector<student> stu;
    for(i=0;i<n;i++)
    { stu.push_back(student(i));}
    for(i=0;i<n;i++)
    { stu[i].setdata();}
    sort(stu.begin(),stu.end(),cmp);
    for(i=0;i<n;i++)
    { stu[i].getdata();}
    for(i=0;i<n;i++)
    { if(stu[i].geta1()>=60) j1++;
      if(stu[i].geta2()>=60) j2++;
      if(stu[i].geta3()>=60) j3++;
    }
    printf("%d %.2lf%%100\n",j1,j1*100.0/n);
    printf("%d %.2lf%%100\n",j2,j2*100.0/n);
    printf("%d %.2lf%%100\n",j3,j3*100.0/n);
    
    return 0;
}

构造函数带参,直接创建类数组是不行的。
方法:构造函数用一个没用的参数
在主函数中创建vector的动态数组,用循环传递创建数组,传递没用的参数实现数组的创建。
三、总结
区间dp有了一般框架减轻了代码难度,但如果不能理解具体题目中循环的开始与结束那依旧很难。状态转移方程依然是代码的核心,能不能想出方程至关重要。线性代数已经结课,每周多出6小时时间,对做各科题目都是有好处的,抓住这时间多做题,让自己有所提高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值