hdoj1789(贪心算法)(一般来说,代价相同的都是用贪心的)

来源:互联网 发布:usr local bin node 编辑:程序博客网 时间:2024/06/08 09:45
#include "iostream"#include <algorithm> //need sort()using namespace std;//#define MAX  10#define MAX 10002struct Homwo //作页日期和分数的结构{int date;//结束时间int score;//减少的分数}p[MAX];//以分数排名bool cmp(const Homwo m,const Homwo n){     return m.score>n.score?1:0;}int main(){    //freopen("in.txt","r",stdin);int t;    cin>>t;//对于每一组测试数据    while (t--){//输入学科数目int n;int j;int i;int vist[MAX]={0};//标记没有访问int flag,k=0;cin>>n;//输入最后和减少的分数for (i=1;i<=n;i++){cin>>p[i].date;}for (i=1;i<=n;i++){cin>>p[i].score;}sort(p+1,p+n+1,cmp);//注意数组时从1开始的!按学分排列//开始处理//i表示学科for (i=1;i<=n;i++){//如果这一天没有安排,if(vist[p[i].date]==0)  vist[p[i].date]=1;//那么把这个学科安排到这一天else{//想前推一天for (j=p[i].date-1,flag=0;j>0;j--){//这一天没有被安排,那么安排,如果被安排,那么就继续向前推//j表示推到的天数if(vist[j]==0){    vist[j]=1;flag=1;break;}}//如果没有找到,那么要扣分。if (flag==0){for (j=n;j>p[i].date;j--){if(vist[j]==0){vist[j]=1;k=k+p[i].score;break;}}}             }   }//输出cout<<k<<endl;}return 0;}

原创粉丝点击