HDU 6015-Skip the Class(模擬-結構體排序)
Skip the Class
Accepts: 678
Submissions: 1285
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
問題描述
終於又開學啦。呃喵最喜歡的就是開學了,因為這樣她又可以愉快地翹課了(啊?) 呃喵接下來有n節課程需要上(換句話說,可以翹。) 每節課程有相應的課程型別與課程翹課價值。 有一點需要注意的是,呃喵不可以翹同一類課程超過兩次,就是如果這類課已經翹了兩次,接下來就一定要上。 問你在這個條件下,呃喵可以獲得的最大翹課價值。
輸入描述
第一行為一個整數T,代表資料組數。 接下來,對於每組資料—— 第一行一個整數n,表示接下來需要依次上的課程數量, 接下來有n行,每行包括一個僅由'a'~'z'構成的長度不超過10的字串s與一個正整數v。 其中字串表示課程的型別,相同的字串代表相同的課程。 資料保證—— 1 <= T <= 1000 對於每組資料,1 <= n <= 100,1 <= |s| <= 10, 1 <= v <= 1000
輸出描述
對於每組資料,輸出一行。 該行有1個整數,表示呃喵可以獲得的最大翹課價值。
輸入樣例
2 5 english 1 english 2 english 3 math 10 cook 100 2 a 1 a 2
輸出樣例
115 3
解題思路:
讀入資料,用結構體儲存某門課的名稱、不同價值和出現次數,將同一門課的不同價值儲存到一個陣列中。
for迴圈各門課,將其不同價值降序排列;然後依次最多取每門課的最大兩個價值相加。
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<map>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 110
struct Node
{
string na;//課程名稱
int v[MAXN];//課程價值
int cv;//課程出現次數
} a[MAXN];
int cmp(int a,int b)//結構體排序
{
return a>b;//對價值降序排列
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("F:/cb/read.txt","r",stdin);
//freopen("F:/cb/out.txt","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
int n,k=0,ans=0;
string s;
int temp;
cin>>n;
for(int i=0; i<n; ++i)
{
bool flag=false;
a[i].cv=0;
cin>>s>>temp;
for(int j=0; j<k; ++j)//判斷當前課程名稱是否出現過
{
if(a[j].na==s)//已經出現
{
a[j].v[a[j].cv++]=temp;
flag=true;
break;
}
}
if(!flag)//沒出現過的話要新加入
{
a[k].na=s;
a[k].v[a[k].cv++]=temp;
++k;//不同課程的數目
}
}
for(int i=0; i<n; ++i)//對各個課程中的不同價值降序排列
sort(a[i].v,a[i].v+a[i].cv,cmp);//排序
/*for(int i=0; i<n; ++i)
{
for(int j=0; j<a[i].cv; ++j)
cout<<a[i].v[j]<<" ";
cout<<endl;
}*/
for(int i=0; i<n; ++i)
{
int cf=0;
for(int j=0; j<a[i].cv; ++j)
{
if(cf==2) break;//翹了兩次
ans+=a[i].v[j];
++cf;
}
}
cout<<ans<<endl;
}
return 0;
}
/*
2
5
english 1
english 2
english 3
math 10
cook 100
2
a 1
a 2
*/
相關文章
- C4top-搶紅包 (模擬-結構體排序)結構體排序
- 基數排序--陣列模擬桶結構排序陣列
- HDU 4288-Coder(模擬)
- C++結構體排序C++結構體排序
- YT15-HDU-字串的模擬字串
- 【資料結構】堆排序和模擬實現優先順序佇列!!資料結構排序佇列
- 排名——採用結構體排序結構體排序
- 【c++】結構體sort排序C++結構體排序
- Java虛擬機器之Class類檔案結構Java虛擬機
- fastmock模擬常見資料結構ASTMock資料結構
- 攜程前端模擬排序動畫前端排序動畫
- HDU 4985-Little Pony and Permutation(模擬置換)
- HDU 5319 Painter (模擬 腦洞題)AI
- ZOJ 3875 Lunch Time(結構體排序)結構體排序
- Keil的軟體模擬和硬體模擬
- Altair SimSolid功能介紹 無網格快速結構模擬 衡祖模擬AISolid
- 【深入Java虛擬機器】之二:Class類檔案結構Java虛擬機
- Class類檔案結構
- 有限元模擬 有限體積模擬
- HDU 5237-Base64(模擬-K輪加密)加密
- JAVA Class類檔案結構Java
- Altair SimSolid 工程模擬軟體 衡祖模擬AISolid
- PID除錯軟體(C#、模擬、模擬)除錯C#
- 2013杭州網路賽C題HDU 4640(模擬)
- 模擬賽總結(三)
- 暑假模擬賽總結
- 7.13模擬賽總結
- 模擬賽總結(二)
- Altair SimSolid複雜裝配體無網格快速結構模擬研討會AISolid
- 停車場的模擬管理(資料結構 C++)資料結構C++
- pat—結構體排序(用map彌補struct缺陷)結構體排序Struct
- 《Java虛擬機器原理圖解》 1.1、class檔案基本組織結構Java虛擬機圖解
- 類檔案結構_class類檔案的的結構
- java class例項代表哪些結構Java
- Altair SimSolid複雜裝配體無網格快速結構模擬線上研討會AISolid
- ocm模擬考試總結
- 10.2模擬賽總結
- 10月份模擬賽總結