首页 > 代码库 > Luogu【P2904】跨河(DP)
Luogu【P2904】跨河(DP)
题目链接在这里
此题DP。用一个前缀和一样的东西,把载i个奶牛的时间求出来,然后DP代码如下:
for(int i=1;i<=n;++i){ f[i]=que[i]; for(int j=0;j<i;++j) f[i]=min(f[i],f[j]+que[i-j]); }
这句话的意思是说,先载i头奶牛,然后从载0头到载i-1头寻找,看有没有更优解。如果有,那么更新。
最后输出的时候输出DP[n]-m,因为最后FJ是不用再回对岸的
放上代码
#include<cstdio> #include<cstdlib> #include<cctype> using namespace std; inline long long min(long long a,long long b){ return a<b?a:b; } inline long long read(){ long long num=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch==‘-‘) f=-1; ch=getchar(); } while(isdigit(ch)){ num=(num<<1)+(num<<3)+ch-‘0‘; ch=getchar(); } return num*f; } int que[1000000]; int f[1000000]; int main(){ int n=read(),m=read(); que[0]=m<<1; for(int i=1;i<=n;++i) que[i]=que[i-1]+read(); for(int i=1;i<=n;++i){ f[i]=que[i]; for(int j=0;j<i;++j) f[i]=min(f[i],f[j]+que[i-j]); } printf("%d",f[n]-m); return 0; }
Luogu【P2904】跨河(DP)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。