AcWing-900

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

7

思路(朴素版)

状 态 表 示 : f ( i , j ) , 表 示 从 1   i 中 选 刚 好 可 以 拼 成 j 的 所 有 方 法 状态表示:f(i,j),表示从1~i中选刚好可以拼成j的所有方法 状态表示:f(i,j),表示从1 i中选刚好可以拼成j的所有方法

属 性 : 数 量 属性:数量 属性:数量

核 心 : 最 后 一 个 数 i 不 取 或 者 取 k 个 正 好 拼 成 j 核心:最后一个数i不取或者取k个正好拼成j 核心:最后一个数i不取或者取k个正好拼成j

状 态 划 分 : f ( i − 1 , j ) 取 0 个 i , 1 个 i … … , k 个 i 变 为 f ( i , j ) 状态划分:f(i-1,j)取0个i,1个i……,k个i变为f(i,j) 状态划分:f(i−1,j)取0个i,1个i……,k个i变为f(i,j)

由状态划分可得到状态转移方程:

f ( i , j ) = f ( i − 1 , j ) + f ( i − 1 , j − i ) + f ( i − 1 , j − 2 i ) + … … + f ( i − 1 , j − k i ) f(i,j) = f(i-1,j)+f(i-1,j-i)+f(i-1,j-2i)+……+f(i-1,j-ki) f(i,j)=f(i−1,j)+f(i−1,j−i)+f(i−1,j−2i)+……+f(i−1,j−ki)

f ( i , j − i ) =                 f ( i − 1 , j − i ) + f ( i − 1 , j − 2 i ) + … … + f ( i − 1 , j − k i ) f(i,j-i) = ~~~~~~~~~~~~~~~f(i-1,j-i)+f(i-1,j-2i)+……+f(i-1,j-ki) f(i,j−i)= f(i−1,j−i)+f(i−1,j−2i)+……+f(i−1,j−ki)

相减得最终的状态转移方程:

f ( i , j ) = f ( i − 1 , j ) + f ( i , j − i ) f(i,j) = f(i-1,j)+f(i,j-i) f(i,j)=f(i−1,j)+f(i,j−i)

核心代码

for(int i=1;i<=n;i++) {

for(int j=0;j<=n;j++) {

dp[i][j] = dp[i - 1][j] % MOD; // 如果容量j小于i的话,不能对i进行选择。

if (j >= i) { //只有容量j大于等于i时,才能对i的选择多少进行讨论

dp[i][j] = (dp[i-1][j]+dp[i][j-i]) % MOD;

}

}

}

完整代码

package acWing900;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.StreamTokenizer;

public class Main {

static int N = 1010,MOD = (int) (1e9+7);

static int n;

static int dp[][] = new int[N][N];

public static void main(String[] args) throws Exception{

Read r = new Read();

n = r.nextInt();

for(int i=1;i<=n;i++) {

dp[0][i] = 0; // 当容量为i有0个物品一个则没有方案。

}

for(int i=0;i<=n;i++) {

dp[i][0] = 1; // 当容量为0前i个物品一个不选也是一种方案。

}

// 特殊 dp[0][0] = 1

for(int i=1;i<=n;i++) {

for(int j=0;j<=n;j++) {

dp[i][j] = dp[i - 1][j] % MOD; // 如果容量j小于i的话,不能对i进行选择。

if (j >= i) { //只有容量j大于等于i时,才能对i的选择多少进行讨论

dp[i][j] = (dp[i-1][j]+dp[i][j-i]) % MOD;

}

}

}

System.out.println(dp[n][n]);

}

class Read{

StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

public int nextInt() throws Exception{

st.nextToken();

return (int)st.nval;

}

}

降维(利用滚动数组)

合并得最终的状态转移方程为:

f ( i , j ) = f ( i − 1 , j ) + f ( i , j − i ) f(i,j) = f(i-1,j)+f(i,j-i) f(i,j)=f(i−1,j)+f(i,j−i)

由状态方程可知,需要利用的仅有当前行和上一行所以可以利用滚动数组的概念将二维降至一维,即:

f ( j ) = f ( j ) + f ( j − i ) f(j) = f(j) + f(j-i) f(j)=f(j)+f(j−i)

核心代码:

for(int i=1;i<=n;i++) {

for(int j=i;j<=n;j++) {

dp[j] = (dp[j]+dp[j-i]) % MOD;

}

}

完整代码:

package acWing900;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.StreamTokenizer;

public class Main {

static int N = 1010,MOD = (int) (1e9+7);

static int n;

static int dp[] = new int[N];

public static void main(String[] args) throws Exception{

Read r = new Read();

n = r.nextInt();

dp[0] = 1;

for(int i=1;i<=n;i++) {

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值