杭电oj平台上11页的题目代码:hdu-page11 (2080~2089)

//2081
//所有的短号都是是 6+手机号的后5位
#include<stdio.h>
#define N 12
char num[N];
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
scanf("%s", num);
//输出下标为6以后的数字
printf("6%s ", num + 6);
}
return 0;
}

//2083
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define N 505
int friends[N], mini[N];
using namespace std;
int main()
{
int m;
int n;
scanf("%d", &m);
while (m--)
{
memset(mini, 0, sizeof(mini));
//n表示n个朋友
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &friends[i]);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
mini[i] += abs(friends[j] - friends[i]);
}
}
sort(mini, mini + n);
printf("%d ", mini[0]);
}
return 0;
}

//2084
/*由上往下推,由于结果状态多,不好处理;
由低往上推,都归于一个起点,只需要算出由底往上得到的最大价值即可
设置一个二维数组,dp,dp[i][j]-----dp[i+1][j],dp[i+1][j+1]*/
#include<stdio.h>
#include<string.h>
#define N 110
int dp[N][N];
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int c;
int n;
scanf("%d", &c);
while (c--)
{
memset(dp, 0, sizeof(dp));
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
scanf("%d", &dp[i][j]);
}
}
/*思路:是从下面往上面遍历,从最后一行开始遍历,用dp[n][1]记录自身,,,,直到dp[n][n]记录自身;
第n-1行,dp[n-1][1]记录的是dp[n-1][1]、 就是与其相邻的下面一行的两个数的较大值 max(dp[n][1],dp[n][2])的和,dp[n-1][2]记录的是dp[n-1][2]、 就是与其相邻的下面一行的两个数的较大值 max(dp[n][2],dp[n][3])的和,,,
,,,,
一直到第1行,dp[1][1]=max(dp[2][1],dp[2][2])+dp[1][1];
*/
for (int i = n; i >= 1; i--)
{
for (int j = 1; j <= n; j++)
{
dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + dp[i][j];
}
}
printf("%d ", dp[1][1]);
}
return 0;
}

一生有所追!
原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8641575.html