vj P1547 逆转,然后再见(记忆化搜索)
2016-07-22 13:40
393 查看
水题
#include <bits/stdc++.h>
using namespace std;
int s[110][110]={0};
int n;
struct NODE
{
int value;
int flag;
}node[110];
int minn=1e6;
int FLAG=0;
int sum=0;
void bfs(int k)
{
if(sum<minn&&FLAG==(n-1)) {minn=sum;return;}
if(k>n) return;
for(int i=1;i<=k;++i)
{
if(node[i].flag>0) {
node[i].flag--;
node[k].flag++;
sum+=s[i][k];
FLAG++;
bfs(k+1);
node[i].flag++;
node[k].flag--;
sum-=s[i][k];
FLAG--;
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
scanf("%d",&s[i][j]);
for(int i=1;i<=n;++i)
node[i].flag=0;
node[1].value=0;
node[1].flag=3;
bfs(2);
printf("%d\n",minn);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int s[110][110]={0};
int n;
struct NODE
{
int value;
int flag;
}node[110];
int minn=1e6;
int FLAG=0;
int sum=0;
void bfs(int k)
{
if(sum<minn&&FLAG==(n-1)) {minn=sum;return;}
if(k>n) return;
for(int i=1;i<=k;++i)
{
if(node[i].flag>0) {
node[i].flag--;
node[k].flag++;
sum+=s[i][k];
FLAG++;
bfs(k+1);
node[i].flag++;
node[k].flag--;
sum-=s[i][k];
FLAG--;
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
scanf("%d",&s[i][j]);
for(int i=1;i<=n;++i)
node[i].flag=0;
node[1].value=0;
node[1].flag=3;
bfs(2);
printf("%d\n",minn);
return 0;
}
相关文章推荐
- poj2823 单调队列以及双端队列(deque)
- Android Studio使用技巧之常用快捷键汇总
- Sublime Text编辑器的使用
- Linux下tomcat服务有关命令
- LeetCode 169. Majority Element
- Runtime.getRuntime().exec如何执行多行命令
- markdown 页面编辑器
- LibreOffice源码开发_重要数据结构
- 简单易行的用windows系统虚拟苹果mac操作系统 mac下android环境搭建笔记(android studio)
- LeetCode 206. Reverse Linked List
- LeetCode 217. Contains Duplicate
- Data Scraping Studio ™ - Web Scraping & Data Extraction Software
- 到底还是中国人,这官话都一套一套的
- Android使用UncaughtExceptionHandler捕获全局异常 android获取手机信息大全Java追加文件内容使用JavaMail发送邮件OkHttp获取系统时间
- Java深入 - 图片处理
- 多重背包的java实现 二进制优化
- PHP单元测试(phpunit)笔记
- VMware 12安装Mac OS X 10.11_Vmware虚拟机下窗口大小自动调整的设置 在BIOS中开启VT虚拟化以提高安卓模拟器的性能_VMware 安装win7出现"二进制转换与此平台上的
- iOS 整体框架类图
- android studio 日志- Android Studio使用小技巧:自定义Logcat