HDU11页

本文详细解析了HDU在线评测系统中的经典算法题目,包括动态规划、数学建模、字符串匹配等,通过实例讲解如何高效解题,涵盖了从初学者到进阶选手所需的关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HDU2015
偶数求和

HDU2018

cow(n-1)+cow(n-3)

HDU2022

#include <stdio.h>
 int main(void)
{
    int n, m;
     while(scanf("%d%d", &n, &m) != EOF)
        {
        int sum=0, ai=2, count=0, i;
        for(i=1; i<=n; i++)
        {
            sum += ai;
            ai += 2;     
            if( i % m == 0)
             {
                count++;
                if(count != 1)
                    printf(" ");
                printf("%d", sum / m);
                sum = 0;
            }
        }
        if(n % m == 0)
            printf("\n");
        else
            printf(" %d\n", sum / (n % m));/*超出的部分*/
        }
    }

HDU2024

     getchar() 用来吃空格

HDU2030

汉字占俩个字符,并且码小于0
注意getchar吃换行。

HDU2036

利用多边形(n边形)面积计算公式:
S=0.5 * ( (x0*y1-x1*y0) + (x1*y2-x2*y1) + ... + (xn*y0-x0*yn) ),
其中点(x0,y0), (x1, y1), ... , 
(xn,,yn)为多边形上按逆时针顺序的顶点((x0,y0)与(xn,yn)为同一点)。

HDU2039

注意用float

HDU2043

    if(n>16||n<8)
    char a[100]={'~','!','@','#','$','%','^'};
        for(int i=0;i<n;i++)
        {
            if(s[i]<='Z'&&s[i]>='A')
                f=1;
        }
        sum+=f; f=0;

HDU2045

F[N]=F[N-1]+2*F[N-2]

HDU2047

    1    最后一个字符是O: 
    前面n-1个位置有2*M(n-2)种可能。而第n个位置此时是’O’,所以此时共有2*  M(n-2)种可能; 
    2    最后一个字符不是 O: 
n-1个位置有M(n-1)种可能,而第n个位置有两种可能,所以此时共有2*M(n-2)种可能
    综上可知,本题的递推关系为:M(n)=2*[M(n-1)+M(n-2)]

HDU2049

s[i]=(i-1)*(s[i-1]+s[i-2])
2064&2049 
  Cnm*f(m);

HDU2050
线面问题

   直线分平面             f(n)=f(n-1)+n      
                         n(n+1)/2+1
   折线分平面
                         f(n)=f(n-1)+4(n-1)+2-1
                         2n^2-n+1
   封闭曲线分平面问题
                         f(n)=f(n-1)+2(n-1)
                          =n^2-n+2
   平面分割空间问题(hdu1290)
                          (n^3+5n)/6+1

HDU2052

多加一个换行

HDU2053

做这种规律题要打表找规律
第一种方法可以通过-1和1为标志方便变换
也可以将1 4 9也就是1 2 3的平方赋值

HDU2054

换种问法 就是0与0.000是相同的
把点赋值为‘\0’

HDU2055

用的map函数 map<char,int> s符合映射关系
map要写在 using namespace std;下或者主函数里
s本身就是一个数组

HDU2058 连续序列和

    假设首项是1,我们代入m=a1*n+n*(n-1)/2,则有n(n+1)=2m(n是项数的个数)。
    所以有n*(n+1)=2m>n*n,即n<sqrt(2m); 也就是说项数最多的情况也只有sqrt(2m)。
     (以上的'n'不是题目中的n,以上的'm'为题目中的m)
     
    那么我们枚举1---sqrt(2m),枚举的是项数的个数(即数列区间长度); 
    m知道了,长度知道了,那么可以解出首项;(即解方程m=a1*n+n*(n-1)/2;)
    for(i=int(sqrt(2*m));i>0;i--)
  {
   sum=m-i*(i-1)/2;
   if(sum%i==0)
   {
    printf("[%d,%d]\n",sum/i,sum/i+i-1);
   }
  }

HDU2064

汉诺塔

有俩种算法          3f(n-1)+2;
                   3的n次幂减1;(不能用pow,精度有问题)

HDU2069

dp[0][0]=1;    
for(int i=0;i<5;i++)
      for(int k=1;k<=100;k++)       
         for(int j=a[i];j<=n;j++)
              dp[j][k]+=dp[j-a[i]][k-1]; 
              也可以用暴力的方法,不用计算1分的情况

HDU2072

  map函数的用法

HDU2077
汉诺塔三 F(n)=f(n-1)+2;

int ans=1
   n--;
while(n--)
   ans*=3;
cout<<ans-1+2<<endl;

HDU2085

        a[i]=3*a[i-1]+2*b[i-1];
        b[i]=a[i-1]+b[i-1];

HDU2087

kmp水题
#include <cstdio>
#include <cstring>
const int MAXN = 1010;
char T[MAXN], P[MAXN];
int f[MAXN];
 void getVal(int l) {
	int i = 0, j = -1;
	f[0] = -1;
	while (i < l) {
		if (j == -1 || P[i] == P[j]) {
			i++;
			j++;
			f[i] = j;
		} else
			j = f[j];
	}
}
int kmp() 
{
	int i=0,j=0,ans=0;
	int lt=strlen(T),lp=strlen(P);
	getVal(lp);
	while(i<lt) 
        {
		if (j == -1 || T[i] == P[j]) {
			i++;
			j++;
		} else
			j = f[j];
		if (j == lp) {
			ans++;
			j = 0;
		}
	}
	printf("%d\n", ans);
}
 
int main() {
	while (scanf("%s%s", T, P) == 2) {
		kmp();
	}
	return 0;
}

HDU2082

dp[0][0]=1

HDU2088

输出样列间有换行
int f=0;
if(f) cout<<endl;
.
.
.
f=1;

HDU2094
拓扑排序

 #include<cstdio>
 #include<iostream>
#include<cstring>
#include<map>
using namespace std;
#define MAXN 1010
int edge[MAXN][MAXN];
int ind[MAXN];
bool solve(int t)
{
    int num=0;
    for(int i=1;i<=t;i++)
       if(ind[i]==0) num++;
    if(num==1) return true;
     return false;
}
int main()
{
    int n;
    map<string,int> name;
    while(scanf("%d",&n)&&n)
    {
        name.clear();
        memset(edge,0,sizeof(edge));
        memset(ind,0,sizeof(ind));
         int t=1;
        char a[100],b[100];
        for(int i=1;i<=n;i++)
        {
            scanf("%s%s",a,b);
            if(!name[a]) name[a]=t++;
            if(!name[b]) name[b]=t++;
            edge[name[a]][name[b]]=1;
            ind[name[b]]++;
        }
        t--;
        if(solve(t)) puts("Yes");
        else puts("No");
    }
    return 0;
}

HDU2095

    异或
     a^a=0, 
     0^a=a

HDU2098

打表
第一章 绪论(第一讲) 第一章 绪论(第二讲) 第二章 状态空间分析法(第一讲) 第二章 状态空间分析法(第二讲) 第二章 状态空间分析法(第三讲) 第二章 状态空间分析法(第四讲) 第二章 状态空间分析法(第五讲) 第二章 状态空间分析法(第六讲) 第二章 状态空间分析法(第七讲) 第二章 状态空间分析法(第八讲) 第二章 状态空间分析法(第九讲) 第三章 线性系统内部特性(第一讲) 第三章 线性系统内部特性(第二讲) 第三章 线性系统内部特性(第三讲) 第三章 线性系统内部特性(第四讲) 第三章 线性系统内部特性(第五讲) 第三章 线性系统内部特性(第六讲) 第三章 线性系统内部特性(第七讲) 第三章 线性系统内部特性(第八讲) 第四章 状态反馈与状态观测器(第一讲) 第四章 状态反馈与状态观测器(第二讲) 第四章 状态反馈与状态观测器(第三讲) 第四章 状态反馈与状态观测器(第四讲) 第二篇 最优控制 第五章 变分法在最优控制中的应用(第一讲) 第五章 变分法在最优控制中的应用(第二讲) 第五章 变分法在最优控制中的应用(第三讲) 第五章 变分法在最优控制中的应用(第四讲) 第六章 极小值原理(第一讲) 第六章 极小值原理(第二讲) 第六章 极小值原理(第三讲) 第七章 动态规划法(第一讲) 第七章 动态规划法(第二讲) 第八章 二次型性能指标的线性系统最优控制 第一讲 第八章 二次型性能指标的线性系统最优控制 第二讲 第九章 参数估计方法(第二讲) 第十章 最优线性预测与滤波的基本方法(第一讲) 第十章 最优线性预测与滤波的基本方法(第二讲) 第十章 最优线性预测与滤波的基本方法(第三讲) 第十章 最优线性预测与滤波的基本方法(第四讲) 第十章 最优线性预测与滤波的基本方法(第五讲) 第四篇 系统辩识 第十一章 线性系统的经典辩识方法(第一讲) 第十一章 线性系统的经典辩识方法(第二讲) 第十一章 线性系统的经典辩识方法(第三讲) 第十二章 自适应控制(第一讲) 第十二章 自适应控制(第二讲)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值