P2240 部分背包问题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
struct Co{
int m;
int v;
double price;
}co[maxn];
bool cmp(Co a , Co b){
return a.price>b.price;
}
int main(){
int n,t;
double ans =0;
scanf("%d %d",&n,&t);
for(int i=0;i<n;i++){
scanf("%d %d",&co[i].m,&co[i].v);
co[i].price = (double)co[i].v/co[i].m;
}
sort(co,co+n,cmp);
for(int i =0;i<n;i++){
if(co[i].m<t){
t -= co[i].m;
ans += co[i].v;
} else{
ans +=co[i].price * t;
break;
}
}
printf("%.2f",ans);
return 0;
}
P1803 区间贪心
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100010;
struct contest{
int a,b;
}con[maxn];
bool cmp(contest x, contest y){
if(x.a != y.a) return x.a>y.a;
else return x.b < y.b;
}
int main(){
int n;
scanf("%d",&n);
for(int i =0;i<n;i++){
scanf("%d %d",&con[i].a,&con[i].b);
}
sort(con,con+n,cmp);
int startX = con[0].a;
int cnt=1;
for(int i=1;i<n;i++){
if(con[i].b<=startX){
cnt++;
startX = con[i].a;
}
}
printf("%d\n",cnt);
return 0;
}
P1090 合并果子
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
priority_queue<int,vector<int>,greater<int> > q;
int main(){
int n;
cin>>n;
int temp;
for(int i =0;i<n;i++){
scanf("%d",&temp);
q.push(temp);
}
int ans=0;
while(q.size()>1){
int x=q.top();
q.pop();
int y =q.top();
q.pop();
int nx = x+y;
ans += nx;
q.push(nx);
}
printf("%d\n",ans);
return 0;
}
P1106 删数问题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 255;
string s;
int n,a[251];
int main(){
cin>>s;
scanf("%d",&n);
int len = s.length();
for(int i=0;i<len;i++) a[i] = s[i]-'0';
for(int i =1;i<=n;i++){
for(int j=0;j<len;j++){
if(a[j]>a[j+1]){
for(int k =j;k<len;k++){
a[k] = a[k+1];
}
len--;
break;
}
}
}
int start =0;
int index =0;
while(a[index]==0&&len-1>start){
start++;
index++;
}
for(int i=start;i<len;i++){
printf("%d",a[i]);
}
return 0;
}