hdu 1074 Doing Homework
2012-11-12 18:51
363 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1074
状态压缩DP 的模板题
学习了一下状态压缩DP
这里处理字典序的方法 有排序,貌似排序的还简单一些
我用的指针
signp指向上一个状态,p指向状态对应取的字符串
代码:
状态压缩DP 的模板题
学习了一下状态压缩DP
这里处理字典序的方法 有排序,貌似排序的还简单一些
我用的指针
signp指向上一个状态,p指向状态对应取的字符串
代码:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <iostream> #include <algorithm> #include <map> #include <set> #include <queue> using namespace std; const int inf=1000000000; struct node { char word[105]; int deadline; int cost; }num[20]; struct knode { int score; int signp; int p; int cost; }dp[1<<16]; void dfs(int n) { if(n==0) return; dfs(dp .signp); puts(num[dp .p].word); } int main() { int T; int n; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%s%d%d",num[i].word,&num[i].deadline,&num[i].cost); dp[0].cost=0; dp[0].score=0; for(int i=1;i<(1<<n);i++) { dp[i].score=inf; for(int j=1;j<=n;j++) { int m=1<<(j-1); if(m&i) { int k=i-m; int score=num[j].cost-(num[j].deadline-dp[k].cost); if(score<0) score=0; if(score+dp[k].score<dp[i].score) { dp[i].cost=dp[k].cost+num[j].cost; dp[i].score=score+dp[k].score; dp[i].signp=k; dp[i].p=j; } else if(score+dp[k].score==dp[i].score&&strcmp(num[dp[i].p].word,num[j].word)<0) { dp[i].cost=dp[k].cost+num[j].cost; dp[i].score=score+dp[k].score; dp[i].signp=k; dp[i].p=j; } } } } printf("%d\n",dp[(1<<n)-1].score); dfs((1<<n)-1); } }
相关文章推荐
- HDU 1074 Doing Homework(DP·状态压缩)
- HDU1074 Doing Homework
- hdu 1074 Doing Homework
- HDU 1074 Doing Homework
- C语言动态规划(10)___Doing Homework(HDU 1074)
- HDU 1074 Doing Homework(状态压缩dp)
- HDU 1074 Doing Homework (状压+DP) 初学dp笔记
- hdu 1074——Doing Homework
- HDU 1074 Doing Homework (dp+状态压缩)
- hdu-1074 Doing Homework [状态dp]
- HDU 1074 Doing Homework DP 状态压缩
- 【状压DP+输出路径】HDU-1074 Doing Homework
- HDU 1074 Doing Homework
- HDU - 1074 Doing Homework
- HDU 1074 Doing Homework 状压Dp
- hdu 1074 Doing Homework
- HDU 1074 Doing Homework【状态压缩DP】
- hdu 1074 Doing Homework (状态压缩dp)
- HDU 1074 Doing Homework 状态压缩dp
- HDU 1074 Doing Homework