标签:
In the second test case, both Computer->English->Math and Computer->Math->English leads to reduce 3 points, but the word "English" appears earlier than the word "Math", so we choose the first order. That is so-called alphabet order.
题目的意思给你n(n<=15)门课程,你要去完成每门课的作业,但是老师给你了完成的期限,超过期限每一天就会扣你一分。问你安排完成作业的顺序使扣分最小。
第一次做状态压缩,参考分析:点击打开链接
dp[i]:表示到达状态i扣去的最小的分数, sum[i]:表示到达状态i时过去的天数
#include<bits/stdc++.h> using namespace std; template<class T>inline T read(T&x) { char c; while((c=getchar())<=32)if(c==EOF)return 0; bool ok=false; if(c=='-')ok=true,c=getchar(); for(x=0; c>32; c=getchar()) x=x*10+c-'0'; if(ok)x=-x; return 1; } template<class T> inline T read_(T&x,T&y) { return read(x)&&read(y); } template<class T> inline T read__(T&x,T&y,T&z) { return read(x)&&read(y)&&read(z); } template<class T> inline void write(T x) { if(x<0)putchar('-'),x=-x; if(x<10)putchar(x+'0'); else write(x/10),putchar(x%10+'0'); } template<class T>inline void writeln(T x) { write(x); putchar('\n'); } //-------ZCC IO template------ const int maxn=1<<20; const double inf=999999999; #define lson (rt<<1),L,M #define rson (rt<<1|1),M+1,R #define M ((L+R)>>1) #define For(i,t,n) for(int i=(t);i<(n);i++) typedef long long LL; typedef double DB; typedef pair<int,int> P; #define bug printf("---\n"); #define mod 100000000 struct node { char name[150]; int need;//需要几天来解决 int length;//老师给的期限 }p[maxn]; int dp[maxn],pre[maxn],sum[maxn]; void to(int s) { if(!s)return ; to(s^(1<<pre[s])); printf("%s\n",p[pre[s]].name); } int main() { int T,n; read(T); while(T--) { read(n); For(i,0,n) { scanf("%s%d%d",p[i].name,&p[i].length,&p[i].need); } memset(sum,0,sizeof(sum)); int N=1<<n; for(int i=1;i<N;i++) { dp[i]=inf; for(int j=0;j<n;j++) { int tmp=1<<j;if(!(tmp&i))continue; int reduce=sum[i^tmp]+p[j].need-p[j].length; if(reduce<=0)reduce=0; if(dp[i]>=reduce+dp[i^tmp]) { dp[i]=reduce+dp[i^tmp]; pre[i]=j; sum[i]=p[j].need+sum[i^tmp]; } } } writeln(dp[N-1]);to(N-1); } return 0; }
D - Doing Homework HDU1074 ( 动态规划 + 状态压缩 )
标签:
原文地址:http://blog.csdn.net/u013167299/article/details/45200201