pat1021-1030

1021求树的直径网上一搜就有,但是我不太理解 只需要一共求两次的dfs的论调,好吧我收回这句话,好想脑补了下,第一次dfs有多个最长点,只需要搜一个就行QAQ。这么看来我写麻烦了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MP(x, y) make_pair(x, y)
#define FI first
#define SE second
const int INF = 0x3f3f3f3f;
const int N = 1e4+5;

int n;
struct Node{
    int to, nx;
}E[N*N*2];
int head[N], tot;
void add(int fr, int to) {
    E[tot].to = to; E[tot].nx = head[fr]; head[fr] = tot++;
}
int vis[N], dis[N];
void dfs(int x) {
    for(int i = head[x]; ~i; i = E[i].nx) {
        int to = E[i].to;
        if(!vis[to]) {
            vis[to] = 1;
            dfs(to);
        }
    }
}

void bfs(int st) {
    queue<int> Q;
    memset(vis, 0, sizeof(vis));
    vis[st] = 1; dis[st] = 0;
    Q.push(st);
    while(!Q.empty()) {
        int x = Q.front(); Q.pop();

        for(int i = head[x]; ~i; i = E[i].nx) {
            int to = E[i].to;
            if(!vis[to]) {
                vis[to] = 1;
                dis[to] = dis[x]+1;
                Q.push(to);
            }
        }
    }
}
void solve() {
    bfs(1);
    map<int, int> mp;
    map<int, int>::iterator it;
    int mx = -1;
    for(int i = 1; i <= n; ++i) {
        if(dis[i] > mx) {
            mx = dis[i];
        }
    }
    vector<int> doo;
    for(int i = 1; i <= n; ++i) {
        if(dis[i] == mx) {
            doo.push_back(i);
        }
    }
   // printf("%d\n", mx);
   int cnt = 0;
    for(int i = 0; i < doo.size(); ++i) {
        cnt ++;
        if(cnt > 100) break;
        bfs(doo[i]);
        mp[doo[i]] ++;
        mx = -1;
        for(int j = 1; j <= n; ++j) {
            if(mx < dis[j]) {
                mx = dis[j];
            }
        }
        for(int j = 1; j <= n; ++j) {
            if(dis[j] == mx) {
                mp[j] ++;
            }
        }
    }

    for(it = mp.begin(); it != mp.end(); ++it) {
      //  if(it != mp.begin()) printf(" ");
        printf("%d\n", it->first);
    }
   // printf("\n");
}
int main() {
    while(~scanf("%d", &n)) {
        memset(head, -1, sizeof(head)); tot = 0;

        for(int i = 1; i < n; ++i) {
            int a,b; scanf("%d %d", &a, &b);
            add(a, b); add(b, a);
        }

        int cnt = 0;
        memset(vis, 0, sizeof(vis));
        for(int i = 1; i <= n; ++i) {
            if(!vis[i]) {
                vis[i] = 1;
                dfs(i);
                cnt ++;
            }
        }
        if(cnt > 1) {
            printf("Error: %d components\n", cnt); continue;
        }
     //   printf("%d\n", cnt);
        solve();
    }
    return 0;
}

1022 模拟一下就行

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define MP(x, y) make_pair(x, y)
#define FI first
#define SE second

map<string, vector<int> > title;
map<string, vector<int> > author;
map<string, vector<int> > publish;
map<string, vector<int> > keyword;
map<string, vector<int> > year;

int main() {
    int n;
    while(~scanf("%d", &n)) {
        title.clear();
        author.clear();
        publish.clear();
        keyword.clear();
        year.clear();

        char tmp[100];
        for(int i = 0; i < n; ++i) {
            int id; scanf("%d", &id);
            getchar();
            gets(tmp); title[tmp].push_back(id);
         //   printf("%s\n", tmp);

            gets(tmp); author[tmp].push_back(id);

            gets(tmp);
            int len = strlen(tmp);
            string tt; tt.clear();
            for(int j = 0; j <= len; ++j) {
                if( tmp[j] == '\n' || tmp[j] == ' ' || !tmp[j] ) {
                    keyword[tt].push_back(id);
                    tt.clear();
                }else tt += tmp[j];
            }

            gets(tmp); publish[tmp].push_back(id);
            gets(tmp); year[tmp].push_back(id);
        }

        int m; scanf("%d", &m);
        getchar();
        for(int i = 0; i < m; ++i) {
            gets(tmp);
            int len = strlen(tmp);
            int ch = tmp[0]-'0';
            for(int j = 0; j < len; ++j) {
                tmp[j] = tmp[j+3];
            }
            tmp[len-3] = 0;
            printf("%d: %s\n", ch, tmp);
            int fl = 0;
            if(ch == 1) {
                sort(title[tmp].begin(), title[tmp].end());
                for(int j = 0; j < title[tmp].size(); ++j) {
                    printf("%07d\n", title[tmp][j]); fl = 1;
                }
            }else if(ch == 2) {
                sort(author[tmp].begin(), author[tmp].end());
                for(int j = 0; j < author[tmp].size(); ++j) {
                    printf("%07d\n", author[tmp][j]); fl = 1;
                }
            }else if(ch == 3) {
                sort(keyword[tmp].begin(), keyword[tmp].end());
                for(int j = 0; j < keyword[tmp].size(); ++j) {
                    printf("%07d\n", keyword[tmp][j]); fl = 1;
                }
            }else if(ch == 4) {
                sort(publish[tmp].begin(), publish[tmp].end());
                for(int j = 0; j < publish[tmp].size(); ++j) {
                    printf("%07d\n", publish[tmp][j]); fl = 1;
                }
            }else {
                sort(year[tmp].begin(), year[tmp].end());
                for(int j = 0; j < year[tmp].size(); ++j) {
                    printf("%07d\n", year[tmp][j]); fl = 1;
                }
            }
            if(!fl) printf("Not Found\n");
        }
    }
    return 0;

1023 没啥好说

#include<bits/stdc++.h>
using namespace std;
#define sz(X) ((int)X.size())
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 1e4+5;
#define MP(x, y) make_pair<x, y>

char s[30];
char b[30];
char a[30];
int main() {
  while(~scanf("%s", s)) {
    int len = strlen(s);
    int pre = 0;
    for(int i = len-1; i >= 0; --i) {
      int tt = (s[i]-'0') * 2 + pre;
      if(tt >= 10) {
        int tmp = tt;
        tt = tmp%10;
        pre = tmp/10;
      }else pre = 0;
      b[i] = tt+'0';
    }

//    for(int i = 0; i < len; ++i) printf("%c", b[i]); printf("\n");
    int ok = 0;
    if(pre) printf("No\n");
    else {
      for(int i = 0; i < len; ++i) {
        a[i] = b[i];
      }
      sort(a, a+len);
      sort(s, s+len);
      int fl = 1;
      for(int i = 0; i < len; ++i) {
        if(a[i] != s[i]) {
          fl = 0; break;
        }
      }

      if(!fl) printf("No\n");
      else {
        printf("Yes\n"); ok = 1;
        for(int j = 0; j < len; ++j) printf("%c", b[j]);
        printf("\n");
      }
    }

    if(!ok) {
      if(pre) printf("%d",pre);
      for(int i = 0; i < len; ++i) printf("%c", b[i]);
      printf("\n");
    }

  }
  return 0;
}

1024 不敢乱讲,但是这题好想真的数据范围不对,按照题意不可能超ll的吧,,之后改了就对了

#include<bits/stdc++.h>
using namespace std;
#define MP(x, y) make_pair(x, y)
#define FI first
#define SE second
const int INF = 0x3f3f3f3f;
const int N = 1e4+5;
typedef long long ll;

int n[50]; int len;
char s[50];
int tmp[50];
void Print() {
    for(int i = 0; i < len; ++i) printf("%d", n[i]);
}
int main() {
    int k;
    while(~scanf("%s %d", s, &k)) {
        len = strlen(s);
        for(int i = 0; i < len; ++i) n[i] = s[i]-'0';

        int fl = 1;
        for(int i = 0; i < len/2; ++i) {
            if(n[i] != n[len-1-i]) {
                fl = 0; break;
            }
        }
        if(fl) {
            Print(); printf("\n0\n");
            continue;
        }

        for(int i = 1; i <= k; ++i) {
            int pre = 0;
            for(int j = len-1; j >= 0; --j) {
                tmp[j] = n[j]+n[len-1-j]+pre;
                if(tmp[j] >= 10) {
                    tmp[j] -= 10;
                    pre = 1;
                }else pre = 0;
            }

            int cnt = 0;
            if(pre) n[cnt++] = pre;
            for(int j = 0; j < len; ++j) {
                n[cnt++] = tmp[j];
            }
            len = cnt;

            int fl = 1;
            for(int j = 0; j < len/2; ++j) {
                if(n[j] != n[len-1-j]) {
                    fl = 0; break;
                }
            }
            if(fl || i == k) {
                Print(); printf("\n%d\n",i);
                break;
            }
        }
    }
    return 0;
}

1025 模拟

#include<bits/stdc++.h>
using namespace std;
#define MP(x, y) make_pair(x, y)
#define FI first
#define SE second
const int INF = 0x3f3f3f3f;
const int N = 1e4+5;
typedef long long ll;

struct Node{
    ll s; int grade; int loc; int locrank; int allrank;
}E[30005];
int tot;
int pretot;
int cmp(Node a, Node b) {
    if(a.grade != b.grade) return a.grade > b.grade;
    else return a.s < b.s;
}
int main() {
    int n;
    while(~scanf("%d", &n)) {
        pretot = 1; tot = 0;
        for(int i = 1; i <= n; ++i) {
            int k; scanf("%d", &k);
            for(int j = 0; j < k; ++j) {
                ++tot; scanf("%lld %d", &E[tot].s, &E[tot].grade);
            //    printf("%s\n", E[tot].s);
                E[tot].loc = i;
            }
            sort(E+pretot, E+tot+1, cmp);
            for(int j = pretot; j <= tot; ++j) {
                if(j != pretot && E[j].grade == E[j-1].grade) {
                    E[j].locrank = E[j-1].locrank;
                }else E[j].locrank = j-pretot+1;
            }
            pretot = tot+1;
        }
        sort(E+1, E+tot+1, cmp);
        for(int i = 1; i <= tot; ++i) {
            if(i != 1 && E[i].grade == E[i-1].grade) {
                E[i].allrank = E[i-1].allrank;
            }else E[i].allrank = i;
        }

        printf("%d\n", tot);
        for(int i = 1; i <= tot; ++i) {
            printf("%013lld %d %d %d\n", E[i].s, E[i].allrank, E[i].loc, E[i].locrank);
        }
    }
    return 0;
}

1026做了半天,因为之前一直想按照前面几个题目的做法,直接对人来的时间进行排序。这题我是按照时间点进行处理,桌子来,或者人来都是时间点,对于每个时间点单独处理。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <map>
#include <set>
#include <queue>
#include <cmath>
using namespace std;
const int N = 1e4+5;
const int INF = 0x3f3f3f3f;

struct Node{
  int come;
  int serve;
  int cost;
  int vip;  
  int vis;
  int id;
}E[N];
int cmp(Node a, Node b) {
  return a.come < b.come;
}
int cmp2(Node a, Node b) {
  return a.serve < b.serve;
}
int V[105];
int ans[105];
struct Pode{
  int pos, tim, type, vip;
  Pode(int a=0, int b=0, int c=0, int d=0):pos(a), tim(b), type(c), vip(d){}
  bool operator <(const Pode &T) const {
    if(tim != T.tim) return tim > T.tim;
    else if(type != T.type) return type > T.type;
    else if(vip != T.vip) return vip > T.vip;
    else return pos > T.pos;
  }
};


set<int> table;
set<int> vtable;
set<int> person;
set<int> vperson;
priority_queue<Pode> Q;

void solve(int nwtime) {
  if(vperson.size() > 0 && vtable.size() > 0) {
    int per = *vperson.begin();
    E[per].serve = nwtime;
    int ta = *vtable.begin();

    Q.push(Pode(ta, nwtime+E[per].cost, 0, V[ta]));

    vperson.erase(per); person.erase(per);
    vtable.erase(ta);  table.erase(ta);
    if(nwtime < 21*3600) ans[ta] ++;
    return;
  }

  int per = *person.begin();
  E[per].serve = nwtime;
  int ta = *table.begin();
  Q.push(Pode(ta, nwtime+E[per].cost, 0, V[ta]));

  vperson.erase(per); person.erase(per);
  vtable.erase(ta);   table.erase(ta);
  if(nwtime < 21*3600) ans[ta] ++;
}
void put(int x) {
  printf("%02d:%02d:%02d ", x/3600, (x%3600)/60, x%60);
}
int main() {
  int n;
  int k, m;
  while(~scanf("%d", &n)) {
    memset(ans, 0, sizeof(ans));
    memset(V, 0, sizeof(V));
    while(!Q.empty()) Q.pop();
    table.clear();
    vtable.clear();
    person.clear();
    vperson.clear();

    for(int i = 1; i <= n; ++i) {
      int a, b, c;
      scanf("%d:%d:%d %d %d", &a, &b, &c, &E[i].cost, &E[i].vip);
      E[i].come = a*3600 + b*60 + c;
      E[i].cost = min(120, E[i].cost);
      E[i].cost = E[i].cost*60;
      E[i].id = i;
      E[i].vis = 0;
    }  
    sort(E+1, E+n+1, cmp);
    scanf("%d %d", &k, &m);
    for(int i = 0; i < m; ++i) {
      int a; scanf("%d", &a);
      V[a] ++;
    }
    for(int i = 1; i <= k; ++i) Q.push(Pode(i, 8*3600, 0, V[i]));

    for(int i = 1; i <= n; ++i) Q.push(Pode(i, E[i].come, 1, E[i].vip));

    while(!Q.empty()) {
      Pode tt = Q.top(); Q.pop();
      int id = tt.pos; int nwtime = tt.tim; int ty = tt.type;
    //  printf("%d %d %d\n", id, nwtime, ty);
      if(tt.type == 0) {
        table.insert(id);
        if(V[id]) vtable.insert(id);
        if(table.size() > 0 && person.size() > 0) solve(nwtime);
      }else {
        person.insert(id);
        if(E[id].vip) vperson.insert(id);
        if(table.size() > 0 && person.size() > 0) solve(nwtime);
      }
    }
    sort(E+1, E+n+1, cmp2);

    for(int i = 1; i <= n; ++i) {
      if(E[i].serve >= 21*3600) break;
      put(E[i].come); put(E[i].serve);
    //  printf("%.3f\n", (E[i].serve-E[i].come)/60.0);
      printf("%.f\n", round((E[i].serve-E[i].come)/60.0));
    }
    for(int i = 1; i <= k; ++i) {
      if(i != 1) printf(" ");
      printf("%d", ans[i]);
    }
    printf("\n");
  }
  return 0;
}

1027

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<cstdio>
using namespace std;
const int N = 1e6+5;
#define mp(A,B) make_pair(A,B)

void put(int x) {
  int t[3]; int c = 0;
  memset(t, 0, sizeof(t));
  while(x) {
    t[c++] = x%13;
    x /= 13;  
  }

  if(t[1] >= 10) printf("%c", t[1]-10+'A');
  else printf("%d", t[1]);

  if(t[0] >= 10) printf("%c", t[0]-10+'A');
  else printf("%d", t[0]);
}

int main () {
  int a, b, c;
  while(~scanf("%d %d %d",&a,&b,&c)) {
    printf("#");

    put(a); put(b); put(c);

  }
  return 0;
}

1028

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<algorithm>

using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1e6+5;

struct Node{
  int id;
  char name[20];
  int grade;
}E[N];
int n, c;
int cmp(Node a, Node b)  {  
  if(c == 1) return a.id < b.id;
  else if(c == 2) {
    int l1 = strlen(a.name); int l2 = strlen(b.name);

    for(int i = 0; i < min(l1, l2); ++i) {
      if(a.name[i] != b.name[i]) 
        return a.name[i] < b.name[i];
    }
    if(l1 != l2) return l1 < l2;
  }else if(a.grade != b.grade) return a.grade < b.grade;    
  return a.id < b.id;
}
int main() {
  while(~scanf("%d %d", &n, &c)) {
    for(int i = 1; i <= n; ++i) {
      scanf("%d %s %d", &E[i].id, E[i].name, &E[i].grade);
    }
    sort(E+1, E+n+1, cmp);

    for(int i = 1; i <= n; ++i) {
      printf("%06d %s %d\n", E[i].id, E[i].name, E[i].grade);
    }

  }
  return 0;
}

1029 查找中位数算法,算法导论上有

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<algorithm>
#include<ctime>
#include<cstdlib>

using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 2e6+5;
typedef long long ll;

ll a[N];


int rand_partion(int l, int r) {
  int randnum = (rand()%(r-l+1)) + l;
//  printf("%d\n", randnum);
  swap(a[r], a[randnum]);

  int fl = l-1;
  int tag = a[r];
  for(int i = l; i < r; ++i) {
    if(a[i] <= tag) {
      fl ++;
      swap(a[fl], a[i]);
    }
  }
  swap(a[fl+1], a[r]);
  return fl+1;
}
ll getMid(int l, int r, int tar) {
//  printf("%d %d %d\n", l, r, tar);
  if(l == r) return a[l];

  int po = rand_partion(l, r);
//  printf("%d:",po);
//  for(int i = l; i <= r; ++i) printf("%lld ", a[i]); printf("\n");

  int len = po-l+1;
  if(tar == len) return a[po];
  else if(tar < len) return getMid(l, po-1, tar);
  else return getMid(po+1, r, tar-len);
}
int main() {
  int n;
  srand(time(NULL));
  while(~scanf("%d", &n)) {
    for(int i = 1; i <= n; ++i) {
      scanf("%lld", &a[i]);
    }
    int m; scanf("%d", &m);
    for(int i = 1; i <= m; ++i) {
      scanf("%lld", &a[i+n]);
    }
    n = n+m;
  //  printf("%d\n", n);
    printf("%lld\n", getMid(1, n, (n+1)/2) );
  }
  return 0;
}

1030 双参数最短路,水一水

#include<cmath>
#include<map>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 505;
const int INF = 0x3f3f3f3f;
#define MP(x, y) make_pair(x, y)

int n,m,s,d;
struct Node{
  int to, nx, dis, cost;
}E[N*N*2];
int head[N], tot;
void add(int fr, int to, int dis, int cost) {
  E[tot].to = to; E[tot].dis = dis; E[tot].cost = cost;
  E[tot].nx = head[fr]; head[fr] = tot++;
}
struct Hode{
  int pos, dis, cost;
  Hode(int a=0, int b=0, int c=0):pos(a),dis(b),cost(c){}
  bool operator < (const Hode &T) const {
    if(dis != T.dis) return dis > T.dis;
    else return cost > T.cost;
  }
};
int _dis[N], _cost[N], pre[N], vis[N];
void dijkstra(int x) {
  priority_queue<Hode> Q;
  memset(vis, 0, sizeof(vis));
  memset(_dis, INF, sizeof(_dis));
  memset(_cost, INF, sizeof(_cost));
  _dis[s] = 0, _cost[s] = 0;
  Q.push(Hode(s, _dis[s], _cost[s]));

  while(!Q.empty()) {
    Hode top = Q.top(); Q.pop();
    int x = top.pos; int dis = top.dis; int cost = top.cost;
    if(vis[x]) continue;
    vis[x] = 1;
    for(int i = head[x]; ~i; i = E[i].nx) {
      int to = E[i].to;

      if(_dis[to] > _dis[x] + E[i].dis) {
        _dis[to] = _dis[x] + E[i].dis;
        _cost[to] = _cost[x] + E[i].cost;
        Q.push(Hode(to, _dis[to], _cost[to]));
        pre[to] = x;
      }else if(_dis[to] == _dis[x] + E[i].dis && _cost[to] > _cost[x] + E[i].cost) {
        _cost[to] = _cost[x] + E[i].cost;
        Q.push(Hode(to, _dis[to], _cost[to]));
        pre[to] = x;
      }
    }
  }
}
void dfs(int x) {
  if(x == s) {
    printf("%d ", s); return;
  }
  dfs(pre[x]);
  printf("%d ", x);
}
int main() {
  while(~scanf("%d %d %d %d", &n, &m, &s, &d)) {
    memset(head, -1, sizeof(head)); tot = 0;
    for(int i = 0; i < m; ++i) {
      int a, b, c, d; scanf("%d %d %d %d", &a, &b, &c, &d);
      add(a, b, c, d); 
      add(b, a, c, d);
    }
  //  printf("hh\n");
    dijkstra(s);
    dfs(d);
    printf("%d %d\n", _dis[d], _cost[d]);
  }
  return 0;
}
代码转载自:https://pan.quark.cn/s/f87b8041184b Language: 中文 欢迎来到戈戈圈! 当你点开这个存储库的时候,你会看到戈戈圈的图标↓ 本图片均在知识共享 署名-相同方式共享 3.0(CC BY-SA 3.0)许可协议下提供,如有授权遵照授权协议使用。 那么恭喜你,当你看到这个图标的时候,就代表着你已经正式成为了一名戈团子啦! 欢迎你来到这个充满爱与希望的大家庭! 「与大家创造更多快乐,与人们一起改变世界。 」 戈戈圈是一个在中国海南省诞生的创作企划,由王戈wg的妹妹于2018年7月14日正式公开。 戈戈圈的创作类型广泛,囊括插画、小说、音乐等各种作品类型。 戈戈圈的目前成员: Contributors 此外,支持戈戈圈及本企划的成员被称为“戈团子”。 “戈团子”一词最初来源于2015年出生的名叫“团子”的大熊猫,也因为一种由糯米包裹着馅料蒸熟而成的食品也名为“团子”,不仅有团圆之意,也蕴涵着团结友爱的象征意义和大家的美好期盼,因此我们最终于2021年初决定命名戈戈圈的粉丝为“戈团子”。 如果你对戈戈圈有兴趣的话,欢迎加入我们吧(σ≧︎▽︎≦︎)σ! 由于王戈wg此前投稿的相关视频并未详细说明本企划的信息,且相关视频的表述极其模糊,我们特此创建这个存储库,以文字的形式向大家介绍戈戈圈。 戈戈圈自2018年7月14日成立至今,一直以来都秉持着包容开放、和谐友善的原则。 我们深知自己的责任和使命,始终尊重社会道德习俗,严格遵循国家法律法规,为维护社会稳定和公共利益做出了积极的贡献。 因此,我们不允许任何人或组织以“戈戈圈”的名义在网络平台或现实中发布不当言论,同时我们也坚决反对过度宣传戈戈圈的行为,包括但不限于与戈戈圈无关的任何...
内容概要:本文详细介绍了一个基于YOLOv8的血细胞智能检测系统全流程开发指南,涵盖从环境搭建、数据准备、模型训练与验证到UI交互系统开发的完整实践过程。项目利用YOLOv8高精度、高速度的优势,实现对白细胞、红细胞和血小板的自动识别与分类,准确率超过93%,单张图像检测仅需0.3秒。通过公开或自建血细胞数据集,结合LabelImg标注工具和Streamlit开发可视化界面,构建了具备图像上传、实时检测、结果统计与异常提示功能的智能系统,并提供了论文撰写与成果展示建议,强化其在医疗场景中的应用价值。; 适合人群:具备一定Python编程与深度学习基础,从事计算机视觉、医疗AI相关研究或项目开发的高校学生、科研人员及工程技术人员,尤其适合需要完成毕业设计或医疗智能化项目实践的开发者。; 使用场景及目标:①应用于医院或检验机构辅助医生进行血涂片快速筛查,提升检测效率与一致性;②作为深度学习在医疗影像领域落地的教学案例,掌握YOLOv8在实际项目中的训练、优化与部署流程;③用于学术论文写作与项目成果展示,理解技术与临床需求的结合方式。; 阅读建议:建议按照“数据→模型→系统→应用”顺序逐步实践,重点理解数据标注规范、模型参数设置与UI集成逻辑,同时结合临床需求不断优化系统功能,如增加报告导出、多类别细粒度分类等扩展模块。
基于蒙特卡洛,copula函数,fuzzy-kmeans获取6个典型场景进行随机优化多类型电动汽车采用分时电价调度,考虑上级电网出力、峰谷差惩罚费用、风光调度、电动汽车负荷调度费用和网损费用内容概要:本文围绕多类型电动汽车在分时电价机制下的优化调度展开研究,采用蒙特卡洛模拟、Copula函数和模糊K-means聚类方法获取6个典型场景,并在此基础上进行随机优化。模型综合考虑了上级电网出力、峰谷差惩罚费用、风光可再生能源调度、电动汽车负荷调度成本以及电网网损费用等多个关键因素,旨在实现电力系统运行的经济性与稳定性。通过Matlab代码实现相关算法,验证所提方法的有效性与实用性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、电动汽车调度相关工作的工程技术人员。; 使用场景及目标:①用于研究大规模电动汽车接入电网后的负荷调控策略;②支持含风光等可再生能源的综合能源系统优化调度;③为制定合理的分时电价政策及降低电网峰谷差提供技术支撑;④适用于学术研究、论文复现与实际项目仿真验证。; 阅读建议:建议读者结合文中涉及的概率建模、聚类分析与优化算法部分,动手运行并调试Matlab代码,深入理解场景生成与随机优化的实现流程,同时可扩展至更多元化的应用场景如V2G、储能协同调度等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值