20140708总结

三道编程题解析

今天的题还是比较水的。。涨自信?

第一题。。显而易见的dp:dp[i][j][k][l][m]:表示i位,j个1,k是否顶上界,l个前导零,是否仍在前导零上。转移方程比较复杂,详见代码。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 long long dp[50][50][2][50][2];
 6 long long work(long long x)
 7 {
 8     long long top[200];
 9     memset(dp,0,sizeof(dp));
10     memset(top,0,sizeof(top));
11     long long i=1;
12     long long j=1;
13     if(x==0) return 0;
14     while(x/j)
15     {
16         i++;
17         j*=2;
18     }
19     if(i)
20         i--;
21     long long n=i;
22     while(x)
23     {
24         top[i]=x%2;
25         x/=2;
26         i--;
27     }
28 //    for(int i=1;i<=n;i++)
29 //        cout<<top[i];
30 //    cout<<endl<<endl;
31     dp[1][0][1][0][0]=1;
32 //    for(int i=1;i<=n;i++)
33 //        cout<<top[i];
34 //    cout<<endl;
35     for(i=1;i<=n;i++)
36         for(j=0;j<=n/2;j++)
37             for(int k=0;k<=n;k++)
38             {
39                 dp[i+1][j][0][k+1][0]+=dp[i][j][0][k][0];
40                 dp[i+1][j+1][0][k][1]+=dp[i][j][0][k][0];
41                 if(top[i]==0)
42                     dp[i+1][j][1][k+1][0]+=dp[i][j][1][k][0];
43                 else
44                 {
45                     dp[i+1][j][0][k+1][0]+=dp[i][j][1][k][0];
46                     dp[i+1][j+1][1][k][1]+=dp[i][j][1][k][0];
47                 }
48                 for(long long l=0;l<=1;l++)
49                     dp[i+1][j+l][0][k][1]+=dp[i][j][0][k][1];
50                 for(long long l=0;l<=top[i];l++)
51                     dp[i+1][j+l][l==top[i]][k][1]+=dp[i][j][1][k][1];
52 //                cout<<dp[i][j][up]<<endl;
53             }
54     long long ans=0;
55     for(int k=0;k<=n;k++)
56         for(int i=1;i<=(n-k)/2;i++)
57         {
58             ans+=dp[n+1][i][0][k][1]+dp[n+1][i][1][k][1];
59         }
60     
61 //    for(int j=1;j<=n+1;j++)
62 //    for(int k=0;k<=n;k++)
63 //    for(int i=1;i<=n;i++)
64 //        cout<<dp[j][i][0][k][1];
65     return ans;
66 }
67 void work()
68 {
69     freopen("testA.in","r",stdin);
70     freopen("testA.out","w",stdout);
71     long long L,R;
72     cin>>L>>R;
73     if(L==1)
74         cout<<work(R)<<endl;
75     else
76         cout<<work(R)-work(L-1)<<endl;
77 //    cout<<work(R)<<"  "<<work(L-1)<<endl;
78 }
79 int main()
80 {
81     work();
82     return 0;
83 }
View Code

 第二题比较复杂,大意就是把[ai,bi] 作为区间,落在[1,N]上,互不重叠,长度互不相等。然后dp[j][k]表示在i位,选了k个,其和为j。

然后答案就是,详见标程代码(我还没有写出来)。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 using namespace std;
 6 const long long MOD =1000000007LL;
 7 long long dp[1007][1007];
 8 long long C[2014][2014];
 9 long long x[101];
10 #ifdef unix
11 #define LL "%lld\n"
12 #else 
13 #define LL "I64d\n"
14 #endif
15 void init()
16 {
17     memset(dp,0,sizeof(dp));
18     memset(C,0,sizeof(C));
19     memset(x,0,sizeof(x));
20     x[0]=1;
21     for(int i=1;i<=100;i++)
22         x[i]=x[i-1]*i%MOD;
23     for(int i=1;i<1000;i++)
24     {
25         C[i][i]=1;
26         C[i][0]=1;
27         for(int j=1;j<i;j++)
28         {
29             C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
30         }
31     }
32     dp[0][0]=1;
33     for(int i=1;i<=1000;i++)    
34         for(int j=1000;j>=i;j--)
35             for(int k=50;k>0;k--)
36                 dp[k][j]=(dp[k][j]+dp[k-1][j-i])%MOD;
37 }
38 int main()
39 {
40     init();
41     int T,N,K;
42     cin>>T;
43     long long ans=0;
44     while(T--)
45     {
46         cin>>N>>K;
47         if(K*(K+1)/2>N)
48         {
49             printf("0\n");
50             continue;
51         }
52         ans=0;
53         for(int L=K;L<=N;L++)
54         {
55             ans=(ans+dp[K][L]*C[N+K-L][K]%MOD)%MOD;
56         }
57         printf("%lld\n",(ans*x[K])%MOD);
58     }
59 }
View Code

 

第三题比较水,我就不多说什么了,多特判就好了。。

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     freopen("testC.in","r",stdin);
 7     freopen("testC.out","w",stdout);
 8     int n,m,x;
 9     cin>>n>>m>>x;
10     if(x<0)
11     {
12         cout<<0<<endl;
13         return 0;
14     }
15     if(x==0)
16     {
17         cout<<n*m/2<<endl;
18         return 0;
19     }
20     x-=1;
21     n-=2*x;
22     m-=2*x;
23     if(n<=0||m<=0)
24         cout<<0<<endl;
25     else if(n==1||m==1)
26         cout<<n*m-n*m/2<<endl;
27     else
28         cout<<(n+m)-2<<endl;
29     return 0;
30 }
View Code

 

 

转载于:https://www.cnblogs.com/JackSlowFuck/p/3831941.html

【源码免费下载链接】:https://renmaiwang.cn/s/2gdnj 《R语言数据挖掘方法及应用》由薛薇编写而成的一本系统阐述R语言在数据挖掘领域前沿技术的著作。该书旨在指导读者学会使用R语言进行高效、实用的数据分析与建模工作,涵盖了从理论基础到实践操作的全过程。作为一款功能强大且开源的统计计算和图形处理平台,R语言凭借其丰富的工具库和社区支持,在数据分析与可视化方面展现出显著优势。在数据挖掘领域,R语言提供了包括`caret`、`randomForest`、`tm`、`e1071`等广泛使用的专用包,这些工具能够帮助用户更便捷地进行数据预处理、特征选择、模型构建和结果评估。全书首先介绍R语言的基本知识体系,涵盖环境配置与安装方法、基础语法规范以及常见数据类型分析等内容。这些基础知识是开展后续数据分析工作的必备技能,通过学习可以快速掌握R语言的核心功能。随后章节深入讲解了数据挖掘的主要概念与流程,包括数据清洗、转换整理和探索性分析等环节,同时详细阐述了分类、聚类、关联规则挖掘及预测等多种典型任务的具体实施方法。这些内容有助于读者全面理解数据挖掘的整体架构及其核心工作步骤。在应用实践部分,薛薇老师结合真实案例展示了R语言在实际业务场景中的具体运用,例如市场细分分析、客户流失预测以及个性化推荐系统等。通过这些案例研究,读者可以深入学习如何利用相关工具包解决实际问题,并提升数据分析能力。此外,书中配套的“案例数据集”和“代码资源”为读者提供了实践操作的机会,使理论知识能够更好地转化为动手技能。通过实际操作分析,读者可以加深对R语言数据挖掘方法的理解并灵活运用。总之,《R语言数据挖掘方法及应用》是一部全面讲解R语言在数据分析与建模领域的教材,无论你是刚开始学习的新人还是经验丰富的专业人士,都能从中获益匪浅。通过深入研读此书,你可以掌握R语言的数据挖掘技巧,并将其应用到实
内容概要:本文提出了一种基于改进粒子滤波算法的无人机三维航迹预测方法,并通过Matlab代码实现仿真验证。该方法针对传统粒子滤波在无人机轨迹预测中存在的粒子退化和计算复杂度高等问题,引入优化策略提升滤波精度与效率,有效提高了对无人机运动轨迹的非线性、非高斯环境下的预测能力。文中详细阐述了算法原理、模型构建流程及关键步骤,包括状态转移建模、观测方程设计、重采样优化等,并结合三维空间中的实际飞行轨迹进行仿真实验,验证了所提方法相较于标准粒子滤波在位置预测误差和收敛速度方面的优越性。; 适合人群:具备一定信号处理、导航估计算法基础,熟悉Matlab编程,从事无人系统、智能交通、航空航天等相关领域研究的研究生或科研人员; 使用场景及目标:①应用于无人机实时轨迹预测与状态估计系统中,提升飞行安全性与自主性;②为复杂环境下非线性动态系统的建模与滤波算法研究提供技术参考;③【预测】改进粒子滤波的无人机三维航迹预测方法(Matlab代码实现)支持后续扩展至多无人机协同跟踪与避障系统的设计与仿真; 阅读建议:建议结合Matlab代码逐模块分析算法实现细节,重点关注粒子滤波的改进机制与三维可视化结果对比,同时可尝试替换不同运动模型或噪声条件以深入理解算法鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值