题目背景
?%ra=linkhttps://leetcode.cn/problems/soup-servings/description/
请问以下两者有什么区别
vectordouble>> dp(n + 1, vector<double>(n + 1));//法1
double dp[n+5][n+5];//法2
洛谷808题中,用法1创建的数组即可AC,但是我用C++语言写法二的数组时无法AC,仅通过30/41个样例
同时用C语言写法二却能通过,所以我在想是否与力扣的编译器有关
后续我尝试了一下,发现C++法2有概率通过,但是与力扣有关,很奇怪
class Solution {
public:
double soupServings(int n) {
double res=0.0;
if(n>4475)
return 1.0;
int m=ceil((double)n/25);
double dp[m+5][m+5];//替换成下一行就通过了
// vector> dp(n + 1, vector(n + 1));
dp[0][0]=0.5;
for(int i=1;i<=m;i++)
dp[0][i]=1;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{
dp[i][j] = (dp[max(0, i - 4)][j] + dp[max(0, i - 3)][max(0, j - 1)] +
dp[max(0, i - 2)][max(0, j - 2)] + dp[max(0, i - 1)][max(0, j - 3)]) / 4.0;
}
return dp[m][m];
}
};
第一次提交错误的样例是30号样例n =101,输出为0.86719
第二次提交错误的样例是33号样例n=475,输出为0.92450
加了个memset(a,0,sizeof(a));过了,因为double dp[n+5][n+5]不会初始化为0,而vector会初始化,所以看运气过样例