1 条题解
-
0
自动搬运
来自洛谷,原作者为

引领天下
用6年时间,讲好一个笑话。搬运于
2025-08-24 21:36:58,当前版本为作者最后更新于2017-11-11 09:01:16,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
为什么要用DP呢?
用DFS多好。
每次搜一堆,一直搜下去,找最大值,不就行了吗???
DP多难写啊。
#谨以此题解祝我下午NOIP RP=无限大!
上代码:
#include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cmath> #include <iostream> using namespace std; int w[4][101],n,i,j,k; long long ans,now;//用long long,防爆 void in(){ scanf ("%d%d%d",&i,&j,&k),n=i+j+k;//n是书的总数,i,j,k为123堆 for (int t=1;t<=i;t++)scanf ("%d",&w[1][t]);//读入书 for (int t=1;t<=j;t++)scanf ("%d",&w[2][t]); for (int t=1;t<=k;t++)scanf ("%d",&w[3][t]); } void dfs(int a,int b,int c){//DFS int x; if (a+b+c==0){ if (now>ans)ans=now; return;//搬完了,更新答案 } x=n-(a+b+c)+1;//搬这本书需要的体力 if (a>0){//如果有才搜 now+=w[1][a]*x;//递归前加 dfs(a-1,b,c);//搬一本(第一堆) now-=w[1][a]*x;//改回去 }//以下原理同上 if (b>0){ now+=w[2][b]*x; dfs(a,b-1,c); now-=w[2][b]*x; } if (c>0){ now+=w[3][c]*x; dfs(a,b,c-1); now-=w[3][c]*x; } } int main(){ in();//读入 dfs(i,j,k);//DFS printf ("%lld",ans);//输出 return 0; }
- 1
信息
- ID
- 1382
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者