小红书4.23笔试第一题 数组增值 AC
一开始用队列存发现内存占用过多,后来折腾了几轮发现居然可以dp,因为每个数字增加的操作次数都是固定的
下面这样可以AC
```cpp
const int MOD = 1e9 + 7;
int main()
{
int n;
cin >> n;
vector<int> arr;
int max = -1;
while (n--)
{
int a;
cin >> a;
arr.push_back(a);
if (a > max)
max = a;
}
// long long类型
vector<long long> dp(max + 1, 0);
vector<long long> mem(max + 1, 0);
dp[0] = 1;
dp[1] = 3;
mem[1] = dp[0];
for (int i = 2; i <= max; ++i)
{
// 这里也要mod 不mod只能A36%
dp[i] += (mem[i - 1] + i * dp[i - 1]) % MOD;
mem[i] = dp[i];
dp[i] += (i + 1) % MOD;
}
long long res = 0;
for (auto i : arr)
res = (res + dp[i]) % MOD;
cout << res;
}
```
下面这样可以AC
```cpp
const int MOD = 1e9 + 7;
int main()
{
int n;
cin >> n;
vector<int> arr;
int max = -1;
while (n--)
{
int a;
cin >> a;
arr.push_back(a);
if (a > max)
max = a;
}
// long long类型
vector<long long> dp(max + 1, 0);
vector<long long> mem(max + 1, 0);
dp[0] = 1;
dp[1] = 3;
mem[1] = dp[0];
for (int i = 2; i <= max; ++i)
{
// 这里也要mod 不mod只能A36%
dp[i] += (mem[i - 1] + i * dp[i - 1]) % MOD;
mem[i] = dp[i];
dp[i] += (i + 1) % MOD;
}
long long res = 0;
for (auto i : arr)
res = (res + dp[i]) % MOD;
cout << res;
}
```
全部评论
递归为什么只能过45啊
uu什么岗
相关推荐
11-03 10:00
西南交通大学 用户运营 点赞 评论 收藏
分享
10-05 07:57
门头沟学院 后端 ProMonkey2024:5个oc?厉害!
但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
小浪_Coding:下次照片务必放出正脸,谢谢
点赞 评论 收藏
分享