HDU1074
来源:互联网 发布:蜂群算法matlab代码 编辑:程序博客网 时间:2024/06/04 12:51
//对DP还是无感╮(╯▽╰)╭
//状态DP看到网上还有人用DFS过了,只是时间多点
//具体的什么思路什么的还是去看KUANG_BIN大神的吧,之前还真没想过DP还可以这么写
#include<iostream>#include<string.h>#include<string>using namespace std;int visit[1<<16];struct node{ int pre; int cost; int time;}dp[1<<16];struct course1{ int cost; int deal; string name;}course[16];void print(int cur){ int work=cur^dp[cur].pre; int number=0; work=work>>1; while(work) { number++; work=work>>1; } if(dp[cur].pre!=0) print(dp[cur].pre); cout<<course[number].name<<endl;}int main(){ int casenumber; scanf("%d",&casenumber); while(casenumber--) { int n; memset(visit,0,sizeof(visit)); scanf("%d",&n); int i,j; for(i=0;i<n;i++) { cin>>course[i].name>>course[i].deal>>course[i].cost; } dp[0].pre=-1; dp[0].cost=0; dp[0].time=0; for(i=0;i<(1<<(n));i++) { for(j=0;j<n;j++) { int k=1<<j; if((i&k)==0) { int now=i|k; int total=dp[i].time+course[j].cost; dp[now].time=total; int reduce=total-course[j].deal; if(reduce<0) reduce=0; reduce+=dp[i].cost; if(visit[now]==1) { if(reduce<dp[now].cost) { dp[now].cost=reduce; dp[now].pre=i; } if(reduce==dp[now].cost) { if(dp[now].pre>i) { dp[now].pre=i; // dp[k].cost=reduce; } } } else { visit[now]=1; dp[now].pre=i; dp[now].cost=reduce; } } } } cout<<dp[(1<<(n))-1].cost<<endl; print((1<<(n))-1); }}
0 0
- HDU1074
- hdu1074
- HDU1074
- hdu1074
- hdu1074
- HDU1074 状态压缩DP
- HDU1074 状态压缩DP
- HDU1074--Doing Homework
- HDU1074 Doing Homework
- hdu1074 状压dp
- HDU1074 Doing Homework
- hdu1074 doing homework
- hdu1074状态压缩
- hdu1074(状压DP)
- hdu1074(dp状态压缩)
- hdu1074---Doing Homework
- HDU1074【状压DP】
- hdu1074 状态压缩dp
- 学生信息管理系统
- GetDc与GetWindowDc的含义
- 状态压缩递推(States Compressing Recursion,SCR)
- 字符串函数---strcpy()与strncpy()详解及实现
- LeetCode: Unique Binary Search Trees
- HDU1074
- javascript学习篇之对象和数组创建等基础知识代码笔记
- UVA - 846 Steps
- 读产品研发管理系列之《培思的力量》
- HTML转义字符
- 模拟赛 大逃亡(时间限制:1s;空间限制:128MB)
- iOS7图标
- Unity3d NGUI 子控件之屏幕自适应
- 记录我的大学----2014.9月