近几日的算法学习(背包问题+回溯递归算法)附例题
最近两天都没有更新博客力(
其实是去学了些算法,算是对计算机科学有了全新的认识吧(我之前在课本学的是什么勾八玩意儿)
CP1055 有多少个数的和是素数(经典的回溯算法,暴力枚举)
俺的做法:#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include<math.h>
void subArray(int A[], int k,int l, int n);
int y=0;
int c[1000000];//存放子集和的数组
int priArray[1000000];//存放组合的数组
void addArray(int n);
int judge(int o);
int main()
{
int i;
int n;
int m=0;
int count=0,flag=0;
int array[100000];
while(1)//录入数据
{
scanf("%d",&n);
if(n==-1)
{
break;
}
array[m]=n;
m++;
}
for (i = 0; i < m; i++)
{
for (int i = 0; i<= m-1 ; i++)//每一次都要初始化,回溯为零
{
priArray[i] = 0;
}
priArray[0] = array[i];//存储首结点
addArray(1);//直接go
subArray(array, i+1, 2, m);//接着到下一位
}
for(int q=0; q<y; q++)
{
flag=judge(c[q]);
if(flag==1)
{
count++;
}
}
for(int q=0; q<y; q++)
{
if(c[q]==1)
{
count--;
}
}
printf("%d\n",count);
return 0;
}
void subArray(int A[], int k, int l, int n)//l是最初的子集个数,n是最大长度与数组长度
{
int i;
if (k==n-1)//递归终止条件
{
priArray[l-1] = A[k];//类似于输出全排列情况
addArray(l);
}
else
{
for ( i= k; i <= n-1; i++)
{
priArray[l-1] = A[i];//分别组合
addArray(l);//输出
subArray(A,i+1, l+1,n);//再次递归
}
}
}
void addArray(int n)
{
int i;
int sum=0;
for (i = 0; i < n; i++)
{
sum+=priArray[i];
}
c[y]=sum;
y++;
}
int judge(int o)
{
for(int j=2; j<o-1; j++)
{
if(o%j==0)
{
return -1;
}
}
return 1;
}
咋说捏,这个算法毕竟有递归,还是数组得开大一点好防止溢出,同时最好画个图之类的,不然很容易把自己绕进去。
ACM2021_32 考试
ACM2021_32 考试
很经典的背包问题:
#include <stdio.h>
#include <string.h>
#define max(x,y) (x>y)?x:y
int main ()
{
int T,M,a,b;
scanf("%d %d",&T,&M);
int i,j;
int dp[M+1][T+1];
memset(dp,0,sizeof(dp));
for(i=1;i<=M;i++)
{
scanf("%d %d",&a,&b);
for(j=1;j<=T;j++)
{
if(j>=a)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a]+b);
else
dp[i][j]=dp[i-1][j];
}
}
printf("%d",dp[M][T]);
return 0;
}
这个要用到二维数组,一个代表数量,一个代表空间,当遇到固定容量求最大价值时可以用这个,还有个贪心算法改天也要尝试一下,同理一些题目转换一下也是OK用的
posted on 2023-01-09 08:43 harumakigohan 阅读(27) 评论(1) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异