标签:
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