完全为了做笔记!!!

完全为了做笔记!!!

完全为了做笔记!!!

我也是新手,全部都是理解前面几个大佬的思路和代码


1:暴力DFS
解题思路:
    就是在每次递归中循环可能的情况,当当前值加上i大于目标值就退出,没啥好说的,这道题用这种方法也能拿到高分

参考代码:

import java.io.*;

public class Main {
	static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	public static void main(String[] args) throws NumberFormatException, IOException {
		int num=Integer.parseInt(bf.readLine());
		//从start从1开始算
		int ans=dfs(1,0,num);
		pw.print(ans);
		pw.flush();
	}
	//n为目标值,sum为当前值,start为起点
	public static int  dfs(int start,int sum,int n) {
		int num=0;
		if(sum==n) return 1;
		for(int i=start;sum+i<=n;i++) {
			num+=dfs(i,sum+i,n);
		}
		return num;
	}
}

2:背包问题,dp数组做法

解题思路:

   创建一个二维数组dp[i][j]意为当前总和为i,限制最大取数为j的种类数

    从1开始遍历到这个数,再在每次遍历中取数最高为1到i的情况,如果i==j,例如3就只能分解成3,如果j==1,例如,3分解为111,那就只有1种情况

    再开始遍历其他情况,例如,3可以分解为1+2,这是分解中带上1的情况,加上是分解中最高为j的情况,就是当前情况

    再从1开始加到num,把每一种最大取值情况相加,即可得答案

参考代码:

import java.io.*;

public class Main {
	static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	public static void main(String[] args) throws NumberFormatException, IOException {
		int num=Integer.parseInt(bf.readLine());
		int[][] dp=new int[num+1][num+1];
		//i表示当前总和为i,j表示选定时最高限制为j的情况
		//dp[i][j]即为当前种类数
		for(int i=1;i<=num;i++) {
			for(int j=1;j<=i;j++) {
				//如果i和j相等,只有一种情况,j=1时,只能分解成1,也就只有1种情况
				if(i==j||j==1) {
					dp[i][j]=1;
				}else {
					//第一个为分解成1和其他数的情况
					//第二个为分解成i分解掉了一个j的情况
					dp[i][j]=dp[i-1][j-1]+dp[i-j] [j];
				}
			}
		}
		int sum=0;
		//加上dp限制为1到num的各种情况
		for(int i=0;i<=num;i++) {
			sum+=dp[num][i];
		}
		pw.print(sum);
		pw.flush();
	}

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论