2795: 【入门】总和最大
#include <bits/stdc++.h>
using namespace std;
int n, m, a[11][11], ans, mx[11];
int main()
{
scanf("%d %d", &n, &m);
for(int i=1; i<=n; ++i){
for(int j=1; j<=m; ++j){
scanf("%d", &a[i][j]);
}
}
for(int i=1; i<=n; ++i){
for(int j=1; j<=m; ++j){
mx[i]=max(mx[i], a[i][j]);
}
ans+=mx[i];
}
printf("%d", ans);
return 0;
}
2794: 【基础】部分背包问题
#include <bits/stdc++.h>
using namespace std;
int n, m, ans;
struct node
{
int w, v;
}a[10010];
//根据价值从大到小排序
bool cmp(node x, node y)
{
return x.v>y.v;
}
int main()
{
scanf("%d %d", &m, &n); //最大载重量, 食品种类
for(int i=1; i<=n; ++i){
scanf("%d %d", &a[i].w, &a[i].v); //重量、价值
}
//根据价值从大到小排序
sort(a+1, a+n+1, cmp);
//先放价值大的
for(int i=1; i<=n; ++i){ //食品种类
if(m>=a[i].w){ //载重可以把第i种全放下
ans+=a[i].w*a[i].v;
m-=a[i].w;
}
else if(m>0){ //放不下全部, 但是能放多少放多少
ans+=m*a[i].v;
break;
}
}
printf("%d", ans);
return 0;
}
1519: 【USACO】超级书架
#include <bits/stdc++.h>
using namespace std;
int n, h[20010], b, s, ans;
int main()
{
scanf("%d %d", &n, &b); //奶牛数量、书架高度
for(int i=1; i<=n; ++i){
scanf("%d", &h[i]);
}
sort(h+1, h+n+1);
for(int i=n; i>=1; --i){
s+=h[i];
ans++;
if(s>=b){
break;
}
}
printf("%d", ans);
return 0;
}
2796: 【基础】排队打水问题
#include <bits/stdc++.h>
using namespace std;
int n, r, t[510], ans, id, asd[110];
int main()
{
scanf("%d %d", &n, &r);
for(int i=1; i<=n; ++i){
scanf("%d", &t[i]);
}
sort(t+1, t+n+1);
for(int i=1; i<=n; ++i){
id=i%r; //分配到哪一个水龙头
if(id==0){
id=r;
}
//asd[id]表示id这个水龙头前面需要等的时间
ans=ans+t[i]+asd[id];
asd[id]+=t[i];
}
printf("%d", ans);
return 0;
}
2800: 【基础】装箱问题
1126: 【提高】删数问题
1642: 【USACO】Payback(还债)