https://codeforces.com/problemset/problem/1547/E
思路
误区:原本以为有空调的地方只能是那个空调的温度,不能被别的空调更新,看了题解后才知道想错了,感觉就是随便DP了一番。先从左往右更新一遍,再从右往左更新一遍。
如果一个点不能更新它的下一个点,那么,它后面的点都不可能会被它更新。
总结
总之DP还是要多练习啊,熟能生巧啊啊啊,这题感觉也没有用到太多课上的知识,感觉就是DP的灵活运用,真希望有一天我也可以掌握DP啊!
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T; cin >> T;
while(T -- )
{
int n, k; cin >> n >> k;
int a[n + 5], t[n + 5], f[n + n];
memset(f, 0x3f3f3f3f, sizeof f);
for(int i = 1; i <= k; i ++ )
{
cin >> a[i];
}
for(int i = 1; i <= k; i ++ )
{
cin >> t[i];
}
for(int i = 1; i <= k; i ++ )
{
f[ a[i] ] = t[i];
}
for(int i = 1; i <= n; i ++ )
{
f[i] = min(f[i], f[i - 1] + 1);
}
for(int i = n; i >= 1; i -- )
{
f[i] = min(f[i], f[i + 1] + 1);
}
for(int i = 1; i <= n; i ++ )
{
cout << f[i] <<" ";
}
cout << endl;
}
return 0;
}