一般背包问题:
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct A{
float v,w,avg,x;
int seq;
}pack[103];
void sort_pack(A pack[],int n){
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(pack[j].avg>pack[i].avg){
swap(pack[i].avg,pack[j].avg);
swap(pack[i].v,pack[j].v);
swap(pack[i].w,pack[j].w);
swap(pack[i].seq,pack[j].seq);
}
}
}
}
int main(){
int n;
float M;
printf("请输入背包个数和背包总重量:\n");
scanf("%d%f",&n,&M);
printf("请输入每个背包的价值和重量:\n");
for(int i=0;i<n;i++){
scanf("%f%f",&pack[i].v,&pack[i].w);
pack[i].avg=pack[i].v/pack[i].w;
pack[i].seq=i;
pack[i].x=0;
}
sort_pack(pack,n);
float c=M;
int i;
float sum=0;
for(i=0;i<n;i++){
if(pack[i].w>c)break;
pack[i].x=1;
c-=pack[i].w;
sum+=pack[i].v;
}
if(i<n){pack[i].x=c/pack[i].w;sum+=pack[i].x*pack[i].v;}
printf("装入物品最大价值为:%f\n各个背包所选择的百分比是:\n",sum);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){//按初始输入的活动顺序输出
if(pack[j].seq==i){
printf(" %d%%",(int)(pack[j].x*100));
break;
}
}
}
printf("\n");
}
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct A{
int s,f,a,seq;
}tim[103];
void sort_huodong(A tim[],int n){
int t1,t2,t3;
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(tim[j].f<tim[i].f){
swap(tim[i].s,tim[j].s);
swap(tim[i].f,tim[j].f);
swap(tim[i].seq,tim[j].seq);
}
}
}
}
int main(){
int n;
printf("请输入活动的个数:\n");
scanf("%d",&n);
printf("请输入每个活动的起始时间和结束时间:\n");
for(int i=0;i<n;i++){
scanf("%d%d",&tim[i].s,&tim[i].f);
tim[i].seq=i;
}
sort_huodong(tim,n);
tim[0].a=1;
int ans=1,j=0;//记录最新被选中的点的序号
for(int i=1;i<n;i++){
if(tim[i].s>=tim[j].f){tim[i].a=1;ans++;j=i;}
else tim[i].a=0;
}
printf("一共能开展%d个活动\n各个活动的开展情况是:\n",ans);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){//按初始输入顺序输出
if(tim[j].seq==i){
printf("%d",tim[j].a);
break;
}
}
}
printf("\n");
}