题目链接:/d/file/titlepic/showproblem.php /> 题意:给出n个课程,每个课程给出课程名称、截止日期、完成需要的时间,超过截止日期完成的公共事业管理就业前景课程每超过一天减少分数1。求最少减少的分数方案,如果有多个方案,输出字典序最小的方案
解题思路:因为n最大是15,可以使用二进制来进行状压DP讨论。
dp结构体:
struct plan{int pre; //记载上一个状态int choice; //记录当前状态选择的课程int time; //记录当前课程完成需要的时间int score; //记录减少的得分}dp[(1<<15)+10];
dp主体部分:
for(int i=1;i<=end;i++){dp[写人的作文400字i].score=99999999;for(int j=n-1;j>=0;j--){ //从后往前遍历int tmp=1<<j;if(i&tmp)商场活动推广{int ttmp=i-tmp; //计算超时多少int tmp_cost=dp[ttmp].time+hw[j].c-hw[j].d; //如果超时不为正数,则扣分为0if(tmp_cost<0) tmp_cost=0;if(tmp_cost+dp[ttmp].score<dp[i].score){dp[i].score=tmp_cost+dp[ttmp].score;dp[i].time=dp[ttmp].time+hw[j].c;dp[i].pre=ttmp;dp[i].choice=j;}}}}
递归输出:
void print(int pos){if(pos==0)return ;print(dp[pos].pre);cout<<hw[dp[pos].choice].name<<endl;return ;}
#include<cstdio>#include<iostream>#include<string>#include<string.h>using namespace std;int t;int n;struct node{string name;int d,c;}hw[30];struct plan{int pre;int choice;int time;int score;}dp停车棚管理制度[(1<<15)+10];void print(int pos){if(pos==0)return ;print(dp[pos].pre);cout<<hw[dp[pos].choice].name<<endl;return ;}int main(){cin>>t;while(t--){memt(dp,0,sizeof(dp));cin>>n;for(int i=0;i<n;i++){cin>>hw[i].name;cin>>hw[i].d>>hw[i].c;}int end=(1<<n)-1;for(int i=1;i<=end;i++){dp[i].score=99999999;for(众数是什么意思int j=n-1;j>=0;j--){int tmp=1<<j;if(i&tmp){int ttmp=i-tmp;int tmp_cost=dp[ttmp].time+hw[j].c-hw[j].d;if(tmp_cost<0) tmp_cost=0;if(tmp_cost+dp[ttmp].score<dp[i].score){dp[i].score=tmp_cost+dp[ttmp].score;dp[i].time=dp[ttmp].time+hw[j].c;dp[i].pre=ttmp;dp[i].choice=j;}}}}cout<<dp[end].score<<endl;print(end);}return 0;}
本文地址:https://blog.csdn.net/littlegoldgold/article/details/107297188
本文发布于:2023-04-08 19:57:02,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/cc76f3d9bb1221cd7bdc85cd8f04f1b7.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:*HDU1074.Doing Homework(状压DP).doc
本文 PDF 下载地址:*HDU1074.Doing Homework(状压DP).pdf
留言与评论(共有 0 条评论) |