2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int v; int a[105]; int g; int b[105][105]; int c[105];//吃的各种维他命量 int w[105];//吃的什么 int cnt;//吃的种类数 int cnt2= 1e9; int w2[105];//存最好吃什么饲料 bool check(){ for(int i=1;i<=v;i++){ if(c[i]<a[i]) return 0; } return 1; } void dfs(int t){ if(t==g+1){ if(check()){//检查是否符合奶牛维他命要求 if(cnt<cnt2){//better cnt2=cnt; for(int i=1;i<=cnt2;i++) w2[i]=w[i];//转移 } } return; } w[++cnt]=t;//记录吃了第 t 种饲料 for(int i=1;i<=v;i++){ c[i]+=b[t][i];//吃第 t 种饲料获得第 i 种维他命 } dfs(t+1);//吃 cnt--; for(int i=1;i<=v;i++){ c[i]-=b[t][i];//回溯 } dfs(t+1);//不吃 return; } signed main(){ scanf("%d",&v); for(int i=1;i<=v;i++){ scanf("%d",&a[i]); } scanf("%d",&g); for(int i=1;i<=g;i++){ for(int j=1;j<=v;j++){ scanf("%d",&b[i][j]); } } dfs(1); cout<<cnt2<<' '; for(int i=1;i<=cnt2;i++) cout<<w2[i]<<' ';//输出 return 0; }
-
-1
#include<bits/stdc++.h> using
namespace std; int
v,need[30],g,a[20]
[30],ans,minn=0x7fffffff,t[30];
int count(int x){
int out=0;
while (x){
out+=x&1;
x>>=1; }
return out;
}
int main(){
int i,j,k;
bool flag;
cin>>v;
for (i=0;i<v;++i){
cin>>need[i];
}
cin>>g;
for (i=1;i<=g;++i){
for (j=0;j<v;++j){
cin>>a[i][j];
}
}
for (i=(1<<g)-1;i>=0;--i){
if (count(i)<minn){
memset(t,0,sizeof(t));
for (j=0;j<g;++j){
if ((1<<j)&i){
for (k=0;k<v;++k){
t[k]+=a[g-j][k];
}
}
}
flag=true;
for (j=0;j<v;++j){
if (t[j]<need[j]){
flag=false;
break;
}
}
if (flag){
minn=count(i);
ans=i;
}
}
}
cout<<minn;
for (i=g-1;i>=0;--i){
if ((1<<i)&ans){
cout<<" "<<g-i;
}
}
return 0;
did jy have dick?
- 1
信息
- ID
- 290
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 192
- 已通过
- 65
- 上传者