第2课 桐桐的运输方案《聪明人的游戏 信息学探秘.提高篇》
生活随笔
收集整理的這篇文章主要介紹了
第2课 桐桐的运输方案《聪明人的游戏 信息学探秘.提高篇》
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
第2課 桐桐的運輸方案(transp)-2020-02-232019 CSP-J/S第一輪各省分數線統計與分析(含浙江省)
http://www.jzb.com/bbs/thread-7553499-1-1.htmlCSP-J/S2019第二輪入門級一等各省評級分數線
http://www.zizzs.com/c/201912/41117.htmlCSP-J/S2019第二輪提高級一等各省評級分數線
http://www.zizzs.com/c/201912/41116.html
*/
#include <bits/stdc++.h>
using namespace std;int n;
bool used[30],best[30];
double ans,x,w[30],v[30],f[30];//search(1,0,0);
void search(int k,double weight,double m)
{//剪枝1 超重 if( weight > x ) return;//剪枝2 if( m>ans ){ans=m;//更新哪個物品選擇了 for(int i=1;i<=n;++i){best[i]=used[i];}}//碰到南墻就回頭 if( k>n ) return;//剪枝3//2.要求所運送貨物的總價值最大。//在第k步時,如果把后面剩下的所有物品都選擇所得到的總價值都不比當前保存的最大價值大,//則不再搜索。if( m+f[k]<ans) return;
/*
20
n=6
weight[i]
6 2 8 15 3 2
v[i]
5 8 10 2 1 1
f[i]
27 22 14 4 2 1
*/ //選擇物品K used[k]=true;search(k+1,weight+w[k],m+v[k]);//不選擇物品K used[k]=false;search(k+1,weight,m);
}
int main( void )
{//第1行是一個實數,表示貨車的最大載貨量x (1<x≤100)。//第2行是一個正整數,表示待運送的貨物數n (1<n≤20)。cin>>x>>n;//后面n行每行兩個用空格隔開的實數,//分別表示第1至第n件貨物的質量W(weight)和價值V(value)。for(int i=1;i<=n;++i){cin>>w[i]>>v[i];}//o(n) 后綴數組 for(int i=n;i>=1;--i){f[i]=f[i+1]+v[i];}ans=0;search(1,0,0);//第1行為被運送貨物的總價值(只輸出整數部分);cout<<(int)floor(ans)<<endl;//第2行為按編號大小順序輸出所有被運送貨物的編號//(當一件都不能運送時,不輸出)。for(int i=1;i<=n;++i){if( best[i] ){cout<<i<<" ";}}cout<<endl;return 0;
}
/*
20
4
3.5 4
4 5
5 6.8
6.9 7作業:
1.小學奧數_7647余數相同問題
http://noi.openjudge.cn/math/7647/2、4.7算法之搜索
http://noi.openjudge.cn/ch0407/3、2.5基本算法之搜索
http://noi.openjudge.cn/ch0205/
*/
總結
以上是生活随笔為你收集整理的第2课 桐桐的运输方案《聪明人的游戏 信息学探秘.提高篇》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为 HarmonyOS2.0(鸿蒙OS
- 下一篇: laravel使用php artisan