uva 301 Transportation(回溯)
来源:互联网 发布:阿里云客服如何联系 编辑:程序博客网 时间:2024/06/06 11:02
其实回溯挺简单的就是暴力+判断条件,条件成立继续暴力,条件不成立就返回下一个暴力,难点就是找成立的条件,
在我看来回溯就是暴力的剪枝,找出成立的条件问题就基本解决了。。。
思路:
这道题应该找到当前的乘车顺序及人数能否乘上车,,,我用num数组标记了每个车站的人数
贴代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>int num[10];struct {int x,y,nu;}node[30];int m,cnt,max,n,sum;void solve(int t){for(int i=t; i<m; i++){int flag = 0;for(int k=node[i].x; k<node[i].y; k++){if(num[k]+node[i].nu > sum){flag = 1;break;}}if(flag == 0){for(int k=node[i].x; k<node[i].y; k++){num[k]+=node[i].nu;}cnt += (node[i].y - node[i].x)*node[i].nu;if(cnt > max)max = cnt;solve(i+1);for(int k=node[i].x; k<node[i].y; k++){num[k]-=node[i].nu;}cnt -= (node[i].y - node[i].x)*node[i].nu;}}return ;}int main(){int i;while(scanf("%d%d%d",&sum,&n,&m),n||m||sum){max = cnt = 0;memset(num,0,sizeof(num));memset(node,0,sizeof(node));for(i=0; i<m; i++){scanf("%d%d%d",&node[i].x,&node[i].y,&node[i].nu);}solve(0);printf("%d\n",max);}}
0 0
- UVA - 301 Transportation (回溯)
- uva 301 Transportation(回溯)
- uva 301 Transportation(回溯)
- UVa 301 - Transportation 回溯
- ( 回溯 )uva 301 - Transportation
- Transportation-301uva 回溯
- UVA - 301 - Transportation (暴力回溯)
- UVA 301 POJ 1040- Transportation DFS 回溯
- Transportation uva+递归+回溯
- UVA 301 Transportation 。。有点需要思考的回溯、、
- UVa 301 - Transportation
- uva 301 - Transportation
- uva 301 - Transportation
- UVa 301 - Transportation
- Uva 301 Transportation
- uva 301 Transportation
- UVa 301 - Transportation
- UVA 301 Transportation
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
- NSTimer学习笔记
- iOS中几种数据持久化方案
- Bootstra中文网
- iOS开发之AsyncSocket使用教程(刚刚)
- uva 301 Transportation(回溯)
- C语言面试题
- POP介绍与使用实践(快速上手动画)
- 《Tomcat日志系统详解》
- 欢迎使用CSDN-markdown编辑器
- ios 判断app是否为第一次启动
- android————AlertDialog,ProGressDialog
- 读Spring的源代码五:AutoWired是如何实现注入的
- KMP算法通俗解释