mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-12-18 13:11:44 +00:00
fix(P1545.cpp): 修复动态规划计算逻辑并优化循环步长
修复dp数组计算中的逻辑错误,将循环步长改为2以提高效率。同时修正最终结果的输出逻辑,当无解时输出-1。
This commit is contained in:
parent
5e1c92cd26
commit
273ff90318
@ -5,7 +5,7 @@
|
|||||||
#include <istream>
|
#include <istream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
using ll = int64_t;
|
using ll = int64_t;
|
||||||
// #define printf
|
#define printf
|
||||||
const ll inf=1e9+7;
|
const ll inf=1e9+7;
|
||||||
ll n,l,a,b;
|
ll n,l,a,b;
|
||||||
std::vector<ll> v,dp,diff;
|
std::vector<ll> v,dp,diff;
|
||||||
@ -23,9 +23,10 @@ int main(){
|
|||||||
diff[e]++;
|
diff[e]++;
|
||||||
}
|
}
|
||||||
dp[0]=0;
|
dp[0]=0;
|
||||||
for(ll i=1;i<=l;i++){
|
for(int i=2;i<=l;i+=2){
|
||||||
|
v[i-1]+=v[i-2];
|
||||||
v[i]+=v[i-1];
|
v[i]+=v[i-1];
|
||||||
for(ll j=a;j<=b&&i-j*2>=0;j++){
|
for(int j=a;j<=b&&i-j*2>=0;j++){
|
||||||
if(!v[i-j*2] || diff[i-j*2]==v[i-j*2-1]){
|
if(!v[i-j*2] || diff[i-j*2]==v[i-j*2-1]){
|
||||||
dp[i]=std::min(dp[i],dp[i-j*2]+1);
|
dp[i]=std::min(dp[i],dp[i-j*2]+1);
|
||||||
}
|
}
|
||||||
@ -35,5 +36,5 @@ int main(){
|
|||||||
printf("diff[%lld]=%lld\n",i,diff[i]);
|
printf("diff[%lld]=%lld\n",i,diff[i]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
std::cout<<dp[l]<<"\n";
|
std::cout<<(dp[l]>=inf?-1:dp[l])<<"\n";
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user