1 1043
题面
给定一个塔,求从上面向下走的最大值。
题解
dp.转移方程写好。
代码
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
int sz[12][12],dp[10][10];
int main()
{
scanf("%d",&n);
for (int i = 1;i <= n;i++)
for (int j = 1;j <= i;j++)
scanf("%d",&sz[i][j]);
for (int i = n;i >= 1;i--)
for (int j = 1;j <= i;j++)
dp[i][j] = max(dp[i+1][j],dp[i+1][j+1]) + sz[i][j];
printf("%d
",dp[1][1]);
return 0;
}
2 1190 排队接水
题意
题解
平均接水时间!(ans+=t[i].tim*(n-i)/n)
代码
#include <cstdio>
#include <algorithm>
using namespace std;
struct one
{
int time, ord;
}d[5000];
int n;
bool _one_cmp(one x, one y)
{
if (x.time < y.time)
{
return true;
}
else if (x.time > y.time)
{
return false;
}
else
{
return x.ord < y.ord;
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
d[i].ord = i + 1;
scanf("%d", &d[i].time);
}
sort(d, d + n, _one_cmp);
for (int i = 0; i < n - 1; i++)
{
printf("%d ", d[i].ord);
}
printf("%d
", d[n - 1].ord);
double total = 0, front = 0;
for (int i = 0; i < n; i++)
{
total += front;
front += d[i].time;
}
printf("%.2lf", total / (double)n);
return 0;
}