- 博客(12)
- 收藏
- 关注
原创 符号三角回溯
#include<stdio.h>int n;int p[1000][1000];int sum,half,count,k;void dfs(int k){ if(k>n){ if(count==half){ sum++; } return ; } else{ for(int i=0;i<=1;i++){ p[1][k]=i; count+=i; for(int j=2;j<=k;j++){ p[j][k-j.
2022-05-19 20:18:02
106
原创 排列---回溯
任务描述1.设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组合),并编程实现输入格式输入M N1<=M=26, N<=M输出格式按字典序输出排列注意:行末不输出多余空格Sample Input4 2Sample OutputA BA CA DB AB CB DC AC BC DD AD BD C #include<stdio.h>#include<string.h>char a[100
2022-05-16 15:39:55
118
1
原创 TSP问题
输入格式第一行输入n,代表有n个城市。接下来n行每行输入n个数,第i行j列的值代表i市到j市的距离,0代表城市之间不通注意:起点和终点都为1n<7,城市之间的距离都不超过100输出格式第一行输出最少的旅行费用第二行输入旅行路径(保证只有一条最短旅行路径)Sample Input4 0 30 6 430 0 5 106 5 0 204 10 20 0Sample Output251 3 2 4 1#include<stdio.h>int
2022-05-16 15:38:01
142
原创 N皇后问题
任务描述在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。输入格式共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。输出格式共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。Sample Input1 85 0Sample Output1 9210 #include<st
2022-05-16 15:35:02
87
原创 01背包----回溯
输入格式第一行输入n,c,分别代表物品的数量和背包的容量第二行输入n个数 分别代表每个物品的重量第三行输入n个数,分别代表每个物品的价值1<n<100,1<c<100,重量不超过100,价值不超过1000输出格式0输出一个数,代表能装入的最大价值Sample Input4 73 5 2 19 10 7 4Sample Output20#include<stdio.h>int n,c;int w[100],v[100];in
2022-05-16 15:33:47
102
原创 0-1背包
#include<stdio.h>int main(){ int n,c,i,j; int w[100],v[100],x[100]; scanf("%d %d",&n,&c); int m[100][100];//m[i][j] i代表可选物品为i,i+1,,,n, j代表背包容量 for(i=1;i<=n;i++){ scanf("%d %d",&w[i],&v[i]); } for(j=0;j<=c;j++){ if.
2022-04-21 09:14:25
91
原创 最长公共子序列
#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ char a[100]; char b[100]; scanf("%s",a+1); scanf("%s",b+1); int lena=strlen(a+1); int lenb=strlen(b+1); int i,j,k,l; int c[100][100],m[100][100]; char z[100].
2022-04-20 21:14:19
183
原创 最大子段和问题的求解(动态规划)
对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大。如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。输入6 -2 11 -4 13 -5 -2输出20#include<stdio.h>int main(){ int n; int arr[100],k[100]; scanf("%d",&n); int i; for(i=1;i<=n;i++){ scanf("%d",&ar
2022-04-01 16:49:39
437
原创 最长单调子序列
给定一个序列,求这个序列的最长上升子序列的长度,并输出这个最长上升子序列,题目保证,最长上升子序列只有一个。第一行输出一个数,代表最长上升子序列的长度。第二行打印这个子序列。输入8 5 2 8 6 3 6 5 7输出4 2 3 6 7#include<stdio.h>#include<stdlib.h> const int N=100;int dp[N],s[N],arr[N],tt[N];int main(){ int n; scanf("%
2022-04-01 16:33:32
127
原创 最大子段和(分治算法)
int maxsubsum(int *a,int left,int right){ int maxsum; if(left==right){ maxsum=a[left]>0?a[left]:0; } else{ int mid; mid=(left+right)/2; int i,j; int leftsum=maxsubsum(a,left,mid); int rightsum=maxsubsum(b,mid+1;right); int maxlefts=0,maxrig.
2022-03-17 21:02:28
157
原创 最大子段和的简单算法
最大子段和的简单算法int maxsum(int n,int *a,int& besti,int& bestj){ int maxsum=0; for(i=0;i<n;i++){ int sum=0; for(j=i;j<n;j++){ sum=sum+a[j]; if(sum>maxsum){ besti=i; bestj=j; maxsum=sum; } } } return maxsum;}
2022-03-17 20:10:40
92
原创 整数划分。。
将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。对给定的整数,输出对应的划分数。测试输入:5预期输出:7测试输入:6预期输出:11提示:对于样例一,可以划分的情况是:5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1故可以划分为7种代码实现:
2022-03-14 20:38:07
152
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人