20200914 day9 刷题记录

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\n",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\n", 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;
} 
posted @ 2020-09-14 13:00  刘子闻  阅读(77)  评论(0)    收藏  举报