博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj 3554 A Miser Boss
阅读量:4635 次
发布时间:2019-06-09

本文共 1059 字,大约阅读时间需要 3 分钟。

题意:有a、b、c三个人同时工作,三个人做不同的任务需要不同的时间,但最后要求三个人做事情的总时间相同,输出做完所有任务需要的最少时间,如果无法达到三个人总工作时间相同,则输出“No”

 

当时一股脑筋觉着是最大流或者其他图论的东西,然后也往dp上想过,就连状态表示都没想出来。后来借鉴了一下大牛们的做法,标准做法应该是bfs所有可能情况,然后再一一帅选。这个bfs好久没写过了,暂时就没写。

 

还有一种特别巧妙的方法:

#include
#include
#include
#include
using namespace std; #define maxn 250 //maxn设为250是保证250>=120*2 #define see(x) cout<<#x<<":"<
<
y){ x = y; } } int main(){ int n, a, b, c; int i, j, k, l; while(~scanf("%d",&n)){ memset(dp,-1,sizeof(dp)); dp[0][121][121] = 0; //把初始值设置在121处,是一个很巧的方法 //平时一般都喜欢吧初始值设置在0、1处,但是此题,有加有减,121是一个减去120后大于0,加上120后小于maxn的数 for(i=0;i
=0){ //本来以为可以不用了,觉得反正有一个0,所以其他的-1 不用忽略也行 //后来发现如果不加的话会相当混乱,难以保证最后的结果是由以赋初值的dp[0][121][121]得来的,而且-1<0 有木有!!! if(j+a
=0&&k+b
=0){ adjust(dp[i+1][j][k-c],dp[i][j][k]+c); } } } } //see(dp[i+1][121][121]) } if(dp[n][121][121]==-1){ printf("NO\n"); } else{ printf("%d\n",dp[n][121][121]/3); } } return 0; }

 

转载于:https://www.cnblogs.com/celia01/archive/2011/11/15/2250162.html

你可能感兴趣的文章
linux简单优化
查看>>
洛谷 P1411 树
查看>>
打字游戏--飞机大战
查看>>
文本输入框、密码输入框
查看>>
内联式css样式,直接写在现有的HTML标签中
查看>>
HackerRank - Bricks Game
查看>>
Expect 教程中文版
查看>>
libcurl 客户端实例
查看>>
由Node.js事件驱动模型引发的思考
查看>>
easyUI样式之easyui-switchbutton
查看>>
在raspberry的jessie版系统上安装opencv3.0
查看>>
codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
查看>>
maven笔记学习
查看>>
关于学习编程的一些看法
查看>>
oracle操作
查看>>
AngularJS $eval $parse
查看>>
electron 创建窗口2
查看>>
zookeeper
查看>>
MySql的四种事务隔离级别
查看>>
隐藏Nginx版本号的安全性与方法
查看>>