社区讨论
P1077 请问这两个代码的运行结果为什么不一样?实在看不出来了!
P1077[NOIP 2012 普及组] 摆花参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo2gv997
- 此快照首次捕获于
- 2023/10/23 13:38 2 年前
- 此快照最后确认于
- 2023/10/23 13:38 2 年前
代码一(不正确)
C#include <iostream>
#include <cstring>
using namespace std;
int n, m;
int arr[105];
int dp[105][105] = {0};
int moda = 1000007;
int dfs(int a, int now);
int main(){
memset(dp, -1, sizeof(dp));
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> arr[i];
}
int ret = dfs(1, 0);
cout << ret;
}
int dfs(int a, int now){
if(a == n + 1){
if(now == m) return 1;
else return 0;
}
if(dp[a][now] == -1){
dp[a][now] = 0;
for(int i = 0; i <= arr[a]; i++){
dp[a][now] = (dfs(a + 1, now + i) + dp[a][now]) % moda;
}
}
return dp[a][now] % moda;
}
代码二(正确):
C#include <iostream>
using namespace std;
int n, m;
int arr[105];
int dp[105][105] = {0};
int moda = 1000007;
// int res = 0;
int dfs(int a, int now);
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> arr[i];
}
int ret = dfs(1, 0);
cout << ret;
}
int dfs(int a, int now){
if(now > m) return 0;
if(now == m) return 1;
if(a == n + 1) return 0; //这里已经包含上面的条件了
if(dp[a][now] == 0){
for(int i = 0; i <= arr[a]; i++){
dp[a][now] = (dfs(a + 1, now + i) + dp[a][now]) % moda;
}
}
return dp[a][now] % moda;
}
测试用例:
C100 100
73 8 4 15 49 58 90 25 11 23 14 74 53 91 36 50 99 45 24 30 81 54 41 13 22 69 92 81 48 49 46 34 47 67 38 34 29 59 44 20 37 19 39 19 39 87 80 88 66 8 87 88 62 80 63 0 52 84 62 59 49 68 40 11 54 75 82 51 30 82 44 15 38 99 82 91 73 54 100 88 63 39 71 84 64 16 39 45 82 78 85 39 86 75 39 40 93 69 37 43
回复
共 2 条回复,欢迎继续交流。
正在加载回复...